In [ ]:
from google.colab import drive
drive.mount('/content/drive')
Mounted at /content/drive

Imports, constants and paths

In [ ]:
import pathlib
from pathlib import Path
import pandas as pd
import PIL
from PIL import Image, ExifTags, ImageOps
from matplotlib import image
from matplotlib import pyplot as plt
import numpy as np
import ast
import json
from scipy import signal
import os
from collections import defaultdict
import random
In [ ]:
root_directory = "/content/drive/My Drive/2022_Projekt_badawczy/ZPD_SZUM/"
plots = root_directory + '/plots'
collected_data = root_directory + "data/"
downloaded_data = root_directory + "BAZA_Z_NETA/"
final_data = root_directory + "finaldata/"
preprocessed_data = root_directory + "preprocessed_data/"
In [ ]:
dataset_url = root_directory
collected_data_dir = pathlib.Path(collected_data)
downloaded_data_dir = pathlib.Path(downloaded_data)
final_data_dir = pathlib.Path(final_data)

collected_data_dir, downloaded_data_dir, final_data_dir
Out[ ]:
(PosixPath('/content/drive/My Drive/2022_Projekt_badawczy/ZPD_SZUM/data'),
 PosixPath('/content/drive/My Drive/2022_Projekt_badawczy/ZPD_SZUM/BAZA_Z_NETA'),
 PosixPath('/content/drive/My Drive/2022_Projekt_badawczy/ZPD_SZUM/finaldata'))

Statistics about data (number of images, number of examples, class names and number of classes)

In [ ]:
print("Collected data")
image_count = len(list(collected_data_dir.glob('*/*.jpg')))
print("jpg images: ", image_count)
image_count = len(list(collected_data_dir.glob('*/*.*')))
print("all images: ", image_count)

print("Downloaded data")
image_count = len(list(downloaded_data_dir.glob('*/*.jpg')))
print("jpg images: ", image_count)
image_count = len(list(downloaded_data_dir.glob('*/*.*')))
print("all images: ", image_count)
Collected data
jpg images:  736
all images:  736
Downloaded data
jpg images:  7428
all images:  7980
In [ ]:
collected_images = []
downloaded_images = []
class_names = ['bicycle', 'bus', 'car', 'motorcycle', 'truck', 'TRUDNOSC_Z_PRZYPISANIEM']

print("Number of images for particular classes collected by hand")
for class_name in class_names:
  dir = class_name + '/*.jpg'
  image_count = len(list(collected_data_dir.glob(dir)))
  collected_images.append(image_count)
  print(class_name, ':', image_count)

print()
print("Number of images for particular classes downloaded online")
for class_name in class_names:
  dir = class_name + '/*.*'
  image_count = len(list(downloaded_data_dir.glob(dir)))
  downloaded_images.append(image_count)
  print(class_name, ':', image_count)
Number of images for particular classes collected by hand
bicycle : 66
bus : 46
car : 488
motorcycle : 50
truck : 69
TRUDNOSC_Z_PRZYPISANIEM : 17

Number of images for particular classes downloaded online
bicycle : 365
bus : 1059
car : 3045
motorcycle : 2487
truck : 1024
TRUDNOSC_Z_PRZYPISANIEM : 0
In [ ]:
df = pd.DataFrame(class_names, columns=['class_name'])
df['collected_images'] = collected_images
df['downloaded_images'] = downloaded_images
df['sum_of_images_in_the_class'] = df.collected_images + df.downloaded_images
display(df)
print()
print("Total sum of all images (collected + downloaded): ", sum(df['sum_of_images_in_the_class']))
print("Total sum of collected images: ", sum(df['collected_images']))
print("Total sum of downloaded images : ", sum(df['downloaded_images']))
class_name collected_images downloaded_images sum_of_images_in_the_class
0 bicycle 66 365 431
1 bus 46 1059 1105
2 car 488 3045 3533
3 motorcycle 50 2487 2537
4 truck 69 1024 1093
5 TRUDNOSC_Z_PRZYPISANIEM 17 0 17
Total sum of all images (collected + downloaded):  8716
Total sum of collected images:  736
Total sum of downloaded images :  7980

Data agregation to one final folder finaldata

(initially without any changes to the files, we collect data about the photos)

SCRIPT EXECUTION TIME

  • START: 14:58
  • END: 15:10
In [ ]:
class_names = ['motorcycle', 'bicycle', 'bus', 'car', 'truck']
images_names_list = list()
images_modes_list = list()
images_formats_list = list()
images_sizes_list = list()
images_red_pixels_list = list()
images_green_pixels_list = list()
images_blue_pixels_list = list()
images_sources_list = list()
metadata_datetime_list = list()
metadata_resolutionunit_list = list()
metadata_Xresolution_list = list()
metadata_Yresolution_list = list()
metadata_brightnessvalue_list = list()
metadata_aperturevalue_list = list()
metadata_phonemake_list = list()
metadata_phonemodel_list = list()
metadata_ISOspeedratings_list = list()
metadata_flash_list = list()
metadata_focallength_list = list()
metadata_sensingmethod_list = list()

for class_name in class_names:
  #each class starts id from 0
  imageid = 0
  #paths
  imageCollectedFilePath = Path.joinpath(collected_data_dir, class_name)
  imageDownloadedFilePath = Path.joinpath(downloaded_data_dir, class_name)
  imageFinalFilePath = Path.joinpath(final_data_dir, class_name)
  #collect images from first source
  for imagePath in list(imageCollectedFilePath.glob('*.*')):
    image = Image.open(imagePath) # loads image (as pd.read_image())
    # save in the same format
    image_name = class_name + str(imageid)
    image_mode = image.mode
    image_format = image.format
    image_size = image.size
    image_source = 'collected'
    pixels = image.histogram()
    red_pixels = pixels[0:256]      # indicates Red
    green_pixels = pixels[256:512]  # indicated Green
    blue_pixels = pixels[512:768]   # indicates Blue
    #print(image_name, image_mode, image_format, image_size, red_pixels, green_pixels, blue_pixels)
    #SAVE IMAGES DATA
    images_names_list.append(image_name)
    images_modes_list.append(image_mode)
    images_formats_list.append(image_format)
    images_sizes_list.append(image_size)
    images_red_pixels_list.append(red_pixels)
    images_green_pixels_list.append(green_pixels)
    images_blue_pixels_list.append(blue_pixels)
    images_sources_list.append(image_source)
    
    #ROTATE IMAGE IF NECESSARY USING ORIENTATION TAG
    # print('image before rotating')
    # plt.imshow(image)
    # plt.show()
    #rotate if necessary using orientation tags
    #image = ImageOps.exif_transpose(image)
    img_exif = image.getexif()
    if bool(img_exif) == False:
      metadata_datetime = ''
      metadata_resolutionunit = ''
      metadata_Xresolution = ''
      metadata_Yresolution = ''
      metadata_brightnessvalue = ''
      metadata_aperturevalue = ''
      metadata_phonemake = ''
      metadata_phonemodel = ''
      metadata_ISOspeedratings = ''
      metadata_flash = ''
      metadata_focallength = ''
      metadata_sensingmethod = ''
      #print('Sorry, image has no exif data.')
    else:
      for key, val in img_exif.items():
        #rotate if necessary using orientation tags
        if key == 274 and val == 3:
          image = image.rotate(180, expand=True)
        elif key == 274 and val == 6:
          image = image.rotate(270, expand=True)
        elif key == 274 and val == 8:
          image = image.rotate(90, expand=True)
        #EXTRACT METADATA FROM TAGS
        #datetime
        if key == 306:
          metadata_datetime = val
        if 306 not in img_exif.keys():
          metadata_datetime = ''
        #metadata_resolutionunit
        if key == 296:
          metadata_resolutionunit = val
        if 296 not in img_exif.keys():
          metadata_resolutionunit = ''
        #metadata_Xresolution
        if key == 282:
          metadata_Xresolution = val
        if 282 not in img_exif.keys():
          metadata_Xresolution = ''
        #metadata_Yresolution
        if key == 283:
          metadata_Yresolution = val
        if 283 not in img_exif.keys():
          metadata_Yresolution = ''
        #metadata_brightnessvalue
        if key == 37379:
          metadata_brightnessvalue = val
        if 37379 not in img_exif.keys():
          metadata_brightnessvalue = ''
        #metadata_aperturevalue
        if key == 37378:
          metadata_aperturevalue = val
        if 37378 not in img_exif.keys():
          metadata_aperturevalue = ''
        #metadata_phonemake
        if key == 271:
          metadata_phonemake = val
        if 271 not in img_exif.keys():
          metadata_phonemake = ''
        #metadata_phonemodel
        if key == 272:
          metadata_phonemodel = val
        if 272 not in img_exif.keys():
          metadata_phonemodel = ''
        #metadata_ISOspeedratings
        if key == 34855:
          metadata_ISOspeedratings = val
        if 34855 not in img_exif.keys():
          metadata_ISOspeedratings = ''
        #metadata_flash
        if key == 37385:
          metadata_flash = val
        if 37385 not in img_exif.keys():
          metadata_flash = ''
        #metadata_focallength
        if key == 37386:
          metadata_focallength = val
        if 37386 not in img_exif.keys():
          metadata_focallength = ''
        #metadata_sensingmethod
        if key == 41495:
          metadata_sensingmethod = val
        if 41495 not in img_exif.keys():
          metadata_sensingmethod = ''

        #if ExifTags.TAGS[key] == 'Orientation':
        #  print(key) #274 is the key to the 'Orientation" TAG
        #print(f'{ExifTags.TAGS[key]}:{val}')
    # print(img_exif)
    # print(type(img_exif))
    # print('image after rotating')
    # plt.imshow(image)
    # plt.show()

    #SAVE IMAGES METADATA
    metadata_datetime_list.append(metadata_datetime)
    metadata_resolutionunit_list.append(metadata_resolutionunit)
    metadata_Xresolution_list.append(metadata_Xresolution)
    metadata_Yresolution_list.append(metadata_Yresolution)
    metadata_brightnessvalue_list.append(metadata_brightnessvalue)
    metadata_aperturevalue_list.append(metadata_aperturevalue)
    metadata_phonemake_list.append(metadata_phonemake)
    metadata_phonemodel_list.append(metadata_phonemodel)
    metadata_ISOspeedratings_list.append(metadata_ISOspeedratings)
    metadata_flash_list.append(metadata_flash)
    metadata_focallength_list.append(metadata_focallength)
    metadata_sensingmethod_list.append(metadata_sensingmethod)

    #SAVE IMAGE
    image.save(Path.joinpath(imageFinalFilePath, f'{image_name}.{str(image_format)}'), format=image_format)
    #remember to increment image_id
    imageid += 1
    #optionally - show image
    if imageid % 250 == 0:
      plt.imshow(image)
      plt.show()
    #CLOSE IMAGE (necessary to release memory, because load() function were not called)
    image.close()
    ### TO DELETE!! ## 
    # if imageid > 2:
    #   break

  #collect images from second source (internet database) 
  for imagePath in list(imageDownloadedFilePath.glob('*.*')):
      image = Image.open(imagePath) # ładuje zdjęcie (jak pd.read_image())
      # save in the same format
      image_name = class_name + str(imageid)
      image_mode = image.mode
      image_format = image.format
      image_size = image.size
      image_source = 'downloaded'
      pixels = image.histogram()
      red_pixels = pixels[0:256]      # indicates Red
      green_pixels = pixels[256:512]  # indicated Green
      blue_pixels = pixels[512:768]   # indicates Blue
      #print(image_name, image_mode, image_format, image_size, red_pixels, green_pixels, blue_pixels)
      #SAVE IMAGES DATA
      images_names_list.append(image_name)
      images_modes_list.append(image_mode)
      images_formats_list.append(image_format)
      images_sizes_list.append(image_size)
      images_red_pixels_list.append(red_pixels)
      images_green_pixels_list.append(green_pixels)
      images_blue_pixels_list.append(blue_pixels)
      images_sources_list.append(image_source)

      #ROTATE IMAGE IF NECESSARY USING ORIENTATION TAG
      # print('image before rotating')
      # plt.imshow(image)
      # plt.show()
      #rotate if necessary using orientation tags
      #image = ImageOps.exif_transpose(image)
      img_exif = image.getexif()
      if bool(img_exif) == False:
        metadata_datetime = ''
        metadata_resolutionunit = ''
        metadata_Xresolution = ''
        metadata_Yresolution = ''
        metadata_brightnessvalue = ''
        metadata_aperturevalue = ''
        metadata_phonemake = ''
        metadata_phonemodel = ''
        metadata_ISOspeedratings = ''
        metadata_flash = ''
        metadata_focallength = ''
        metadata_sensingmethod = ''
        #print('Sorry, image has no exif data.')
      else:
        for key, val in img_exif.items():
          #rotate if necessary using orientation tags
          if key == 274 and val == 3:
            image = image.rotate(180, expand=True)
          elif key == 274 and val == 6:
            image = image.rotate(270, expand=True)
          elif key == 274 and val == 8:
            image = image.rotate(90, expand=True)
          #EXTRACT METADATA FROM TAGS
          #datetime
          if key == 306:
            metadata_datetime = val
          if 306 not in img_exif.keys():
            metadata_datetime = ''
          #metadata_resolutionunit
          if key == 296:
            metadata_resolutionunit = val
          if 296 not in img_exif.keys():
            metadata_resolutionunit = ''
          #metadata_Xresolution
          if key == 282:
            metadata_Xresolution = val
          if 282 not in img_exif.keys():
            metadata_Xresolution = ''
          #metadata_Yresolution
          if key == 283:
            metadata_Yresolution = val
          if 283 not in img_exif.keys():
            metadata_Yresolution = ''
          #metadata_brightnessvalue
          if key == 37379:
            metadata_brightnessvalue = val
          if 37379 not in img_exif.keys():
            metadata_brightnessvalue = ''
          #metadata_aperturevalue
          if key == 37378:
            metadata_aperturevalue = val
          if 37378 not in img_exif.keys():
            metadata_aperturevalue = ''
          #metadata_phonemake
          if key == 271:
            metadata_phonemake = val
          if 271 not in img_exif.keys():
            metadata_phonemake = ''
          #metadata_phonemodel
          if key == 272:
            metadata_phonemodel = val
          if 272 not in img_exif.keys():
            metadata_phonemodel = ''
          #metadata_ISOspeedratings
          if key == 34855:
            metadata_ISOspeedratings = val
          if 34855 not in img_exif.keys():
            metadata_ISOspeedratings = ''
          #metadata_flash
          if key == 37385:
            metadata_flash = val
          if 37385 not in img_exif.keys():
            metadata_flash = ''
          #metadata_focallength
          if key == 37386:
            metadata_focallength = val
          if 37386 not in img_exif.keys():
            metadata_focallength = ''
          #metadata_sensingmethod
          if key == 41495:
            metadata_sensingmethod = val
          if 41495 not in img_exif.keys():
            metadata_sensingmethod = ''
          #if ExifTags.TAGS[key] == 'Orientation':
          #  print(key) #274 is the key to the 'Orientation" TAG
          #print(f'{ExifTags.TAGS[key]}:{val}')
      # print(img_exif)
      # print(type(img_exif))
      # print('image after rotating')
      # plt.imshow(image)
      # plt.show()

      #SAVE IMAGES METADATA
      metadata_datetime_list.append(metadata_datetime)
      metadata_resolutionunit_list.append(metadata_resolutionunit)
      metadata_Xresolution_list.append(metadata_Xresolution)
      metadata_Yresolution_list.append(metadata_Yresolution)
      metadata_brightnessvalue_list.append(metadata_brightnessvalue)
      metadata_aperturevalue_list.append(metadata_aperturevalue)
      metadata_phonemake_list.append(metadata_phonemake)
      metadata_phonemodel_list.append(metadata_phonemodel)
      metadata_ISOspeedratings_list.append(metadata_ISOspeedratings)
      metadata_flash_list.append(metadata_flash)
      metadata_focallength_list.append(metadata_focallength)
      metadata_sensingmethod_list.append(metadata_sensingmethod)

      #SAVE IMAGE
      image.save(Path.joinpath(imageFinalFilePath, f'{image_name}.{str(image_format)}'), format=image_format)
      #remember to increment image_id
      imageid += 1
      #optionally - show image
      if imageid % 250 == 0:
        plt.imshow(image)
        plt.show()
      #CLOSE IMAGE (necessary to release memory, because load() function were not called)
      image.close()
      # if imageid > 6:
      #   break

#after all iterations
data_dictionary = {'name': images_names_list, 
                   'mode': images_modes_list, 
                   'format': images_formats_list, 
                   'size': images_sizes_list, 
                   'R': images_red_pixels_list, 
                   'G': images_green_pixels_list, 
                   'B': images_blue_pixels_list, 
                   'source': images_sources_list,
                   'datetime': metadata_datetime_list, 
                   'resolutionUnit': metadata_resolutionunit_list, 
                   'Xresolution': metadata_Xresolution_list, 
                   'Yresolution': metadata_Yresolution_list, 
                   'brightness': metadata_brightnessvalue_list, 
                   'aperture': metadata_aperturevalue_list, 
                   'phonemake': metadata_phonemake_list, 
                   'phonemodel': metadata_phonemodel_list, 
                   'ISOspeedratings': metadata_ISOspeedratings_list, 
                   'flash': metadata_flash_list, 
                   'focallength': metadata_focallength_list, 
                   'sensingmethod': metadata_sensingmethod_list}
df = pd.DataFrame(data_dictionary)
display(df)
name mode format size R G B source datetime resolutionUnit Xresolution Yresolution brightness aperture phonemake phonemodel ISOspeedratings flash focallength sensingmethod
0 motorcycle0 RGB JPEG (2976, 2976) [13318, 5107, 3702, 4388, 3777, 4177, 4849, 48... [6249, 5455, 3114, 2976, 3528, 3580, 4420, 451... [9755, 3928, 2417, 2805, 4408, 4082, 4301, 482... collected 2022:03:14 17:13:44 2 (72, 1) (72, 1) (233, 100) (169, 100) Xiaomi Mi Note 3 138 24 (3820, 1000) 2
1 motorcycle1 RGB JPEG (3024, 3024) [340, 62, 68, 67, 94, 109, 118, 124, 157, 192,... [3, 5, 4, 3, 7, 4, 8, 12, 19, 21, 22, 33, 34, ... [27, 7, 2, 5, 7, 7, 14, 18, 15, 31, 27, 32, 49... collected 2022:03:14 14:49:39 2 (72, 1) (72, 1) (544, 100) (252, 100) samsung SM-G965F 50 0 (430, 100)
2 motorcycle2 RGB JPEG (3024, 3024) [4, 0, 3, 1, 0, 1, 2, 5, 3, 5, 4, 6, 1, 4, 3, ... [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, ... collected 2022:03:14 14:49:32 2 (72, 1) (72, 1) (574, 100) (252, 100) samsung SM-G965F 50 0 (430, 100)
3 motorcycle3 RGB JPEG (3024, 3024) [12, 4, 6, 16, 12, 16, 30, 27, 23, 30, 40, 42,... [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, ... [0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 0, 1, 0, 2, ... collected 2022:03:14 14:49:38 2 (72, 1) (72, 1) (546, 100) (252, 100) samsung SM-G965F 50 0 (430, 100)
4 motorcycle4 RGB JPEG (3024, 3024) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... collected 2022:03:14 14:49:35 2 (72, 1) (72, 1) (454, 100) (252, 100) samsung SM-G965F 64 0 (430, 100)
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
8694 truck1088 RGB JPEG (1024, 768) [1175, 765, 858, 1051, 1276, 1322, 1524, 1642,... [213, 456, 639, 1157, 1208, 1520, 1863, 2045, ... [5721, 2342, 3063, 3450, 3529, 3870, 4005, 400... downloaded
8695 truck1089 RGB JPEG (434, 326) [5, 1, 2, 0, 2, 1, 4, 4, 5, 4, 10, 19, 37, 71,... [5, 1, 2, 0, 2, 2, 5, 4, 6, 2, 11, 22, 37, 65,... [1, 0, 4, 1, 4, 0, 0, 2, 6, 5, 10, 18, 46, 75,... downloaded
8696 truck1090 RGB JPEG (720, 313) [3348, 2183, 1554, 1171, 1097, 1007, 1019, 906... [5165, 2953, 1884, 1710, 1858, 1845, 1686, 160... [2973, 1779, 1343, 1253, 992, 898, 883, 667, 6... downloaded
8697 truck1091 RGB JPEG (380, 228) [294, 77, 72, 74, 107, 169, 155, 101, 89, 96, ... [101, 52, 39, 37, 46, 48, 42, 55, 49, 71, 76, ... [132, 32, 46, 37, 35, 36, 43, 45, 32, 51, 45, ... downloaded
8698 truck1092 RGB JPEG (285, 213) [101, 31, 58, 84, 112, 218, 333, 327, 343, 423... [25, 28, 39, 51, 77, 168, 220, 269, 254, 273, ... [207, 49, 75, 91, 120, 131, 231, 248, 264, 288... downloaded

8699 rows × 20 columns

Save resulting dataframe to CSV file
In [ ]:
df.to_csv(root_directory+'imagesmetadata2.csv')
Extract metadata from picture
In [ ]:
# image from finaldata
image = Image.open('/content/drive/My Drive/2022_Projekt_badawczy/ZPD_SZUM/BAZA_Z_NETA/motorcycle/ZYM0ZRZ2MA9K.jpg')
img_exif = image.getexif()
print(img_exif)
if bool(img_exif) == False:
  metadata_datetime = ''
  print('Sorry, image has no exif data.')
id = None
print('TAG:value:key')
for key, val in img_exif.items():
  print(f'{ExifTags.TAGS[key]}:{val}:{key}')
print("working", id)
{}
Sorry, image has no exif data.
TAG:value:key
working None
In [ ]:
image = Image.open('/content/drive/My Drive/2022_Projekt_badawczy/ZPD_SZUM/data/motorcycle/IMG_20220328_151748.jpg')
img_exif = image.getexif()
print('TAG:value:key')
for key, val in img_exif.items():
  print(f'{ExifTags.TAGS[key]}:{val}:{key}')
  # if key == 274 and val == 3:
  #   image = image.rotate(180, expand=True)
  # elif key == 274 and val == 6:
  #   image = image.rotate(270, expand=True)
  # elif key == 274 and val == 8:
  #   image = image.rotate(90, expand=True)
  #TODO: EXTRACT METADATA FROM TAGS
  #if ExifTags.TAGS[key] == 'Orientation':
  #  print(key) #274 is the key to the 'Orientation" TAG
TAG:value:key
ExifVersion:b'0220':36864
ComponentsConfiguration:b'\x01\x02\x03\x00':37121
ShutterSpeedValue:(10633, 1000):37377
DateTimeOriginal:2022:03:28 15:17:48:36867
DateTimeDigitized:2022:03:28 15:17:48:36868
ApertureValue:(169, 100):37378
BrightnessValue:(416, 100):37379
MeteringMode:1:37383
FlashPixVersion:b'0100':40960
Flash:24:37385
FocalLength:(3820, 1000):37386
ColorSpace:1:40961
ExifImageWidth:2976:40962
ExifInteroperabilityOffset:713:40965
FocalLengthIn35mmFilm:27:41989
SceneCaptureType:0:41990
ExifImageHeight:2976:40963
Make:Xiaomi:271
Model:Mi Note 3:272
Orientation:6:274
YCbCrPositioning:1:531
SensingMethod:2:41495
XResolution:(72, 1):282
YResolution:(72, 1):283
SceneType:b'\x01':41729
ExposureProgram:0:34850
GPSInfo:{}:34853
ISOSpeedRatings:275:34855
ResolutionUnit:2:296
ExposureMode:0:41986
WhiteBalance:0:41987
Software:jason-user 9 PKQ1.181007.001 V12.0.1.0.PCHMIXM release-keys:305
DateTime:2022:03:28 15:17:48:306
ExifOffset:260:34665
SubsecTime:778237:37520
SubsecTimeOriginal:778237:37521
SubsecTimeDigitized:778237:37522
ExposureTime:(1, 1589):33434
FNumber:(180, 100):33437

The tags that were of our interest:

  • TAG:TAG_CODE (example value)
  • DateTime:306 (eg. 2022:03:28 15:17:48)
  • ResolutionUnit:296 (eg. 2)
  • BrightnessValue:37379 (eg. (416, 100))
  • ApertureValue:37378 (eg. (169, 100))
  • Make:271 (eg. Xiaomi)
  • Model:272 (eg. Mi Note 3)
  • ISOSpeedRatings:34855 (eg. 275)
  • Flash:37385 (eg. 24)
  • FocalLength:37386 (eg. (3820, 1000))
  • SensingMethod:41495 (eg. 2)
  • XResolution:282 (eg. (72, 1))
  • YResolution:283 (eg. (72, 1))

DATA ANALYSIS

Load previosly prepared dataframe
In [ ]:
df = pd.read_csv(root_directory + 'imagesmetadata.csv', index_col=0)
df
Out[ ]:
name mode format size R G B source datetime resolutionUnit Xresolution Yresolution brightness aperture phonemake phonemodel ISOspeedratings flash focallength sensingmethod
0 motorcycle0 RGB JPEG (2976, 2976) [13318, 5107, 3702, 4388, 3777, 4177, 4849, 48... [6249, 5455, 3114, 2976, 3528, 3580, 4420, 451... [9755, 3928, 2417, 2805, 4408, 4082, 4301, 482... collected 2022:03:14 17:13:44 2.0 (72, 1) (72, 1) (233, 100) (169, 100) Xiaomi Mi Note 3 138 24 (3820, 1000) 2.0
1 motorcycle1 RGB JPEG (3024, 3024) [340, 62, 68, 67, 94, 109, 118, 124, 157, 192,... [3, 5, 4, 3, 7, 4, 8, 12, 19, 21, 22, 33, 34, ... [27, 7, 2, 5, 7, 7, 14, 18, 15, 31, 27, 32, 49... collected 2022:03:14 14:49:39 2.0 (72, 1) (72, 1) (544, 100) (252, 100) samsung SM-G965F 50 0 (430, 100) NaN
2 motorcycle2 RGB JPEG (3024, 3024) [4, 0, 3, 1, 0, 1, 2, 5, 3, 5, 4, 6, 1, 4, 3, ... [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, ... collected 2022:03:14 14:49:32 2.0 (72, 1) (72, 1) (574, 100) (252, 100) samsung SM-G965F 50 0 (430, 100) NaN
3 motorcycle3 RGB JPEG (3024, 3024) [12, 4, 6, 16, 12, 16, 30, 27, 23, 30, 40, 42,... [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, ... [0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 0, 1, 0, 2, ... collected 2022:03:14 14:49:38 2.0 (72, 1) (72, 1) (546, 100) (252, 100) samsung SM-G965F 50 0 (430, 100) NaN
4 motorcycle4 RGB JPEG (3024, 3024) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... collected 2022:03:14 14:49:35 2.0 (72, 1) (72, 1) (454, 100) (252, 100) samsung SM-G965F 64 0 (430, 100) NaN
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
8694 truck1088 RGB JPEG (1024, 768) [1175, 765, 858, 1051, 1276, 1322, 1524, 1642,... [213, 456, 639, 1157, 1208, 1520, 1863, 2045, ... [5721, 2342, 3063, 3450, 3529, 3870, 4005, 400... downloaded NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
8695 truck1089 RGB JPEG (434, 326) [5, 1, 2, 0, 2, 1, 4, 4, 5, 4, 10, 19, 37, 71,... [5, 1, 2, 0, 2, 2, 5, 4, 6, 2, 11, 22, 37, 65,... [1, 0, 4, 1, 4, 0, 0, 2, 6, 5, 10, 18, 46, 75,... downloaded NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
8696 truck1090 RGB JPEG (720, 313) [3348, 2183, 1554, 1171, 1097, 1007, 1019, 906... [5165, 2953, 1884, 1710, 1858, 1845, 1686, 160... [2973, 1779, 1343, 1253, 992, 898, 883, 667, 6... downloaded NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
8697 truck1091 RGB JPEG (380, 228) [294, 77, 72, 74, 107, 169, 155, 101, 89, 96, ... [101, 52, 39, 37, 46, 48, 42, 55, 49, 71, 76, ... [132, 32, 46, 37, 35, 36, 43, 45, 32, 51, 45, ... downloaded NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
8698 truck1092 RGB JPEG (285, 213) [101, 31, 58, 84, 112, 218, 333, 327, 343, 423... [25, 28, 39, 51, 77, 168, 220, 269, 254, 273, ... [207, 49, 75, 91, 120, 131, 231, 248, 264, 288... downloaded NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN

8699 rows × 20 columns

Make column size as a list of tuples (instead of string) and add new columns with image height and image weidth (divide the tuple)

In [ ]:
df['size'] = df['size'].apply(ast.literal_eval)
#type(df['size'])
df[['height', 'width']] = pd.DataFrame(df['size'].tolist(), index=df.index)
df
Out[ ]:
name mode format size R G B source datetime resolutionUnit ... brightness aperture phonemake phonemodel ISOspeedratings flash focallength sensingmethod height width
0 motorcycle0 RGB JPEG (2976, 2976) [13318, 5107, 3702, 4388, 3777, 4177, 4849, 48... [6249, 5455, 3114, 2976, 3528, 3580, 4420, 451... [9755, 3928, 2417, 2805, 4408, 4082, 4301, 482... collected 2022:03:14 17:13:44 2.0 ... (233, 100) (169, 100) Xiaomi Mi Note 3 138 24 (3820, 1000) 2.0 2976 2976
1 motorcycle1 RGB JPEG (3024, 3024) [340, 62, 68, 67, 94, 109, 118, 124, 157, 192,... [3, 5, 4, 3, 7, 4, 8, 12, 19, 21, 22, 33, 34, ... [27, 7, 2, 5, 7, 7, 14, 18, 15, 31, 27, 32, 49... collected 2022:03:14 14:49:39 2.0 ... (544, 100) (252, 100) samsung SM-G965F 50 0 (430, 100) NaN 3024 3024
2 motorcycle2 RGB JPEG (3024, 3024) [4, 0, 3, 1, 0, 1, 2, 5, 3, 5, 4, 6, 1, 4, 3, ... [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, ... collected 2022:03:14 14:49:32 2.0 ... (574, 100) (252, 100) samsung SM-G965F 50 0 (430, 100) NaN 3024 3024
3 motorcycle3 RGB JPEG (3024, 3024) [12, 4, 6, 16, 12, 16, 30, 27, 23, 30, 40, 42,... [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, ... [0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 0, 1, 0, 2, ... collected 2022:03:14 14:49:38 2.0 ... (546, 100) (252, 100) samsung SM-G965F 50 0 (430, 100) NaN 3024 3024
4 motorcycle4 RGB JPEG (3024, 3024) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... collected 2022:03:14 14:49:35 2.0 ... (454, 100) (252, 100) samsung SM-G965F 64 0 (430, 100) NaN 3024 3024
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
8694 truck1088 RGB JPEG (1024, 768) [1175, 765, 858, 1051, 1276, 1322, 1524, 1642,... [213, 456, 639, 1157, 1208, 1520, 1863, 2045, ... [5721, 2342, 3063, 3450, 3529, 3870, 4005, 400... downloaded NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN 1024 768
8695 truck1089 RGB JPEG (434, 326) [5, 1, 2, 0, 2, 1, 4, 4, 5, 4, 10, 19, 37, 71,... [5, 1, 2, 0, 2, 2, 5, 4, 6, 2, 11, 22, 37, 65,... [1, 0, 4, 1, 4, 0, 0, 2, 6, 5, 10, 18, 46, 75,... downloaded NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN 434 326
8696 truck1090 RGB JPEG (720, 313) [3348, 2183, 1554, 1171, 1097, 1007, 1019, 906... [5165, 2953, 1884, 1710, 1858, 1845, 1686, 160... [2973, 1779, 1343, 1253, 992, 898, 883, 667, 6... downloaded NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN 720 313
8697 truck1091 RGB JPEG (380, 228) [294, 77, 72, 74, 107, 169, 155, 101, 89, 96, ... [101, 52, 39, 37, 46, 48, 42, 55, 49, 71, 76, ... [132, 32, 46, 37, 35, 36, 43, 45, 32, 51, 45, ... downloaded NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN 380 228
8698 truck1092 RGB JPEG (285, 213) [101, 31, 58, 84, 112, 218, 333, 327, 343, 423... [25, 28, 39, 51, 77, 168, 220, 269, 254, 273, ... [207, 49, 75, 91, 120, 131, 231, 248, 264, 288... downloaded NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN 285 213

8699 rows × 22 columns

EDA = Exploratory Data Analysis

In [ ]:
df.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 8699 entries, 0 to 8698
Data columns (total 22 columns):
 #   Column           Non-Null Count  Dtype  
---  ------           --------------  -----  
 0   name             8699 non-null   object 
 1   mode             8699 non-null   object 
 2   format           8699 non-null   object 
 3   size             8699 non-null   object 
 4   R                8699 non-null   object 
 5   G                8699 non-null   object 
 6   B                8699 non-null   object 
 7   source           8699 non-null   object 
 8   datetime         1224 non-null   object 
 9   resolutionUnit   1240 non-null   float64
 10  Xresolution      1224 non-null   object 
 11  Yresolution      1242 non-null   object 
 12  brightness       766 non-null    object 
 13  aperture         976 non-null    object 
 14  phonemake        1125 non-null   object 
 15  phonemodel       1125 non-null   object 
 16  ISOspeedratings  1082 non-null   object 
 17  flash            1110 non-null   object 
 18  focallength      1108 non-null   object 
 19  sensingmethod    425 non-null    float64
 20  height           8699 non-null   int64  
 21  width            8699 non-null   int64  
dtypes: float64(2), int64(2), object(18)
memory usage: 1.8+ MB
In [ ]:
df.nunique()
Out[ ]:
name               8699
mode                  3
format                3
size               1147
R                  8689
G                  8689
B                  8688
source                2
datetime           1202
resolutionUnit        5
Xresolution          54
Yresolution          53
brightness          489
aperture            106
phonemake            45
phonemodel          237
ISOspeedratings     127
flash                18
focallength         206
sensingmethod         2
height              411
width               570
dtype: int64
In [ ]:
df.columns
Out[ ]:
Index(['name', 'mode', 'format', 'size', 'R', 'G', 'B', 'source', 'datetime',
       'resolutionUnit', 'Xresolution', 'Yresolution', 'brightness',
       'aperture', 'phonemake', 'phonemodel', 'ISOspeedratings', 'flash',
       'focallength', 'sensingmethod', 'height', 'width'],
      dtype='object')
In [ ]:
df['mode'].value_counts()
Out[ ]:
RGB     8509
RGBA     187
L          3
Name: mode, dtype: int64
In [ ]:
df.format.value_counts()
Out[ ]:
JPEG    8147
BMP      365
PNG      187
Name: format, dtype: int64
In [ ]:
df.format.unique()
Out[ ]:
array(['JPEG', 'PNG', 'BMP'], dtype=object)
In [ ]:
df['size'].value_counts()
Out[ ]:
(256, 256)      3005
(64, 64)        1059
(640, 480)       763
(3024, 3024)     287
(2976, 2976)     239
                ... 
(600, 444)         1
(425, 319)         1
(468, 351)         1
(240, 171)         1
(720, 313)         1
Name: size, Length: 1147, dtype: int64
In [ ]:
df['size'][df['size'] < (256, 256)].count()
Out[ ]:
1174
In [ ]:
df['size'].unique()
Out[ ]:
array(['(2976, 2976)', '(3024, 3024)', '(4240, 4240)', ..., '(640, 465)',
       '(355, 266)', '(720, 313)'], dtype=object)
In [ ]:
df.height.value_counts()
Out[ ]:
256     3008
64      1059
640      872
500      342
3024     287
        ... 
224        1
322        1
990        1
536        1
926        1
Name: height, Length: 411, dtype: int64
In [ ]:
df.height[df.height < 256].count()
Out[ ]:
1171
In [ ]:
df.height.value_counts()[df.height.value_counts() > 10]
Out[ ]:
256     3008
64      1059
640      872
500      342
3024     287
1024     252
400      240
2976     239
300      223
4240     193
259      163
800      134
480       95
600       88
1600      86
1280      76
750       46
275       36
700       36
320       35
450       32
424       31
550       29
1920      28
786       26
900       25
1500      24
630       23
625       23
720       22
1000      22
200       21
2048      17
620       17
623       17
1200      16
960       16
650       13
575       13
2100      13
276       13
264       13
580       12
434       11
Name: height, dtype: int64
In [ ]:
df.height.min()
Out[ ]:
64
In [ ]:
df.width.min()
Out[ ]:
58
In [ ]:
df.width.value_counts()
Out[ ]:
256     3006
64      1060
480      772
3024     287
2976     239
        ... 
641        1
725        1
309        1
1160       1
543        1
Name: width, Length: 570, dtype: int64
In [ ]:
type(df.width.value_counts())
Out[ ]:
pandas.core.series.Series
In [ ]:
df.width.value_counts().sort_index()
Out[ ]:
58         1
64      1060
66         1
69         1
71         1
        ... 
3000       1
3024     287
3232       1
3456       1
4240     193
Name: width, Length: 570, dtype: int64
In [ ]:
df.width.value_counts()[df.width.value_counts() > 1]
Out[ ]:
256     3006
64      1060
480      772
3024     287
2976     239
        ... 
531        2
311        2
283        2
454        2
271        2
Name: width, Length: 346, dtype: int64
In [ ]:
df.width.value_counts()[df.width.value_counts() > 10]
Out[ ]:
256     3006
64      1060
480      772
3024     287
2976     239
300      228
4240     193
768      187
194      164
375      157
360       99
225       87
600       69
1200      68
400       59
333       55
183       48
500       45
469       30
240       30
640       29
533       26
492       25
960       25
450       25
426       25
200       22
938       17
425       16
334       16
389       16
1536      16
1067      15
427       15
326       15
199       15
315       14
782       13
320       13
431       12
187       12
335       12
540       12
853       12
468       11
1080      11
350       11
683       11
280       11
Name: width, dtype: int64
In [ ]:
df.width.value_counts().sort_index().plot.hist(bins=1200)
Out[ ]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f36054b8050>
In [ ]:
df.height.median(), df.width.median()
Out[ ]:
(260.0, 256.0)
In [ ]:
df.height.mean(), df.width.mean()
Out[ ]:
(671.1508219335556, 583.2750890907001)
In [ ]:
df.height.std(), df.width.std()
Out[ ]:
(888.9700429119756, 874.1360928347998)
In [ ]:
df.describe()
Out[ ]:
resolutionUnit sensingmethod height width
count 1240.000000 425.000000 8699.000000 8699.000000
mean 3.051613 1.990588 671.150822 583.275089
std 14.600040 0.137037 888.970043 874.136093
min 2.000000 0.000000 64.000000 58.000000
25% 2.000000 2.000000 256.000000 256.000000
50% 2.000000 2.000000 260.000000 256.000000
75% 2.000000 2.000000 640.000000 480.000000
max 300.000000 2.000000 4608.000000 4240.000000

Create pixel histograms

  1. Convert a string representation of R pixels (df.R) list into list of strings (red_list = red.strip('][').split(', ')) (https://www.geeksforgeeks.org/python-convert-a-string-representation-of-list-into-list/)
  2. Convert all strings in the list to integers (https://www.geeksforgeeks.org/python-converting-all-strings-in-list-to-integers/)
  3. Sum red pixels lists (R column) into one final list (red = df.R.sum())
  4. Calculate number of pictures by counting the number of df columns (number_of_pictures = len(df))
  5. Divide the red pixels list by the number of pictures
  6. Create red histogram
In [ ]:
type(df.R)
Out[ ]:
pandas.core.series.Series
In [ ]:
df.R
Out[ ]:
0       [13318, 5107, 3702, 4388, 3777, 4177, 4849, 48...
1       [340, 62, 68, 67, 94, 109, 118, 124, 157, 192,...
2       [4, 0, 3, 1, 0, 1, 2, 5, 3, 5, 4, 6, 1, 4, 3, ...
3       [12, 4, 6, 16, 12, 16, 30, 27, 23, 30, 40, 42,...
4       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...
                              ...                        
8694    [1175, 765, 858, 1051, 1276, 1322, 1524, 1642,...
8695    [5, 1, 2, 0, 2, 1, 4, 4, 5, 4, 10, 19, 37, 71,...
8696    [3348, 2183, 1554, 1171, 1097, 1007, 1019, 906...
8697    [294, 77, 72, 74, 107, 169, 155, 101, 89, 96, ...
8698    [101, 31, 58, 84, 112, 218, 333, 327, 343, 423...
Name: R, Length: 8699, dtype: object
In [ ]:
df.G
Out[ ]:
0       [6249, 5455, 3114, 2976, 3528, 3580, 4420, 451...
1       [3, 5, 4, 3, 7, 4, 8, 12, 19, 21, 22, 33, 34, ...
2       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...
3       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, ...
4       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...
                              ...                        
8694    [213, 456, 639, 1157, 1208, 1520, 1863, 2045, ...
8695    [5, 1, 2, 0, 2, 2, 5, 4, 6, 2, 11, 22, 37, 65,...
8696    [5165, 2953, 1884, 1710, 1858, 1845, 1686, 160...
8697    [101, 52, 39, 37, 46, 48, 42, 55, 49, 71, 76, ...
8698    [25, 28, 39, 51, 77, 168, 220, 269, 254, 273, ...
Name: G, Length: 8699, dtype: object
In [ ]:
initial_R_list = df.R
print(initial_R_list[0])
[13318, 5107, 3702, 4388, 3777, 4177, 4849, 4888, 5515, 5765, 6251, 10736, 8186, 12523, 10406, 11331, 10795, 10687, 11187, 11718, 12056, 12414, 13043, 13379, 14227, 14392, 14910, 15380, 15378, 15680, 15756, 16862, 16949, 17089, 17988, 18436, 18306, 19009, 19455, 20752, 22024, 23262, 23797, 24184, 25452, 24899, 27384, 26943, 28819, 30548, 29950, 30715, 29047, 30864, 30461, 29965, 30412, 29507, 29390, 29004, 28859, 28922, 29439, 30190, 29602, 29977, 30270, 30038, 30479, 30844, 31085, 32703, 31644, 32528, 31699, 31695, 31916, 30802, 29366, 28616, 27431, 27507, 27580, 26969, 26918, 27111, 26408, 26270, 25328, 25387, 25395, 23857, 23535, 23301, 23355, 23134, 22736, 22891, 22155, 22181, 21638, 20737, 20586, 20238, 20179, 20183, 20528, 20283, 20320, 20347, 19848, 20058, 19681, 20211, 20794, 21130, 22512, 22496, 23267, 23316, 22525, 22537, 22590, 21852, 21544, 21864, 21702, 20756, 21561, 21041, 21128, 21223, 21171, 21281, 21232, 21094, 20778, 21251, 21224, 22016, 21905, 21248, 22252, 21614, 22526, 23513, 24144, 25449, 26304, 27368, 29120, 31113, 34066, 36662, 39861, 43008, 47093, 51403, 59624, 66729, 74589, 86488, 98231, 107826, 126118, 133903, 151666, 167072, 171963, 189836, 188847, 201954, 209678, 194385, 209898, 208504, 189634, 201619, 184484, 177391, 167367, 141618, 135233, 117191, 103030, 96234, 83282, 78229, 71939, 56385, 50108, 44412, 34849, 32027, 27978, 23452, 19083, 17157, 15828, 15057, 14592, 13823, 13781, 13251, 13504, 13685, 14264, 13833, 14503, 15426, 18398, 16730, 16139, 14385, 13005, 10536, 8042, 7529, 6493, 5861, 5463, 5132, 4996, 4643, 4445, 4238, 4138, 3852, 3792, 3569, 3352, 3198, 3132, 3035, 2949, 2906, 2784, 2790, 2916, 2938, 2900, 3238, 3220, 3288, 3333, 3487, 3948, 4049, 4791, 5207, 5409, 7769, 8526, 9439, 13900, 166238]
In [ ]:
initial_G_list = df.G
print(initial_G_list[0])
[6249, 5455, 3114, 2976, 3528, 3580, 4420, 4515, 4695, 4992, 5160, 5516, 5886, 6502, 7303, 11777, 9467, 13933, 11987, 12854, 12672, 12720, 13027, 13456, 13520, 14582, 14480, 15468, 15860, 16126, 16672, 16852, 17134, 17632, 17545, 17633, 18014, 17782, 19257, 19533, 20150, 20670, 19996, 20833, 21318, 22404, 22836, 23646, 24454, 25622, 26962, 27871, 29333, 31315, 32616, 32104, 32019, 32676, 32312, 31912, 33015, 31383, 31616, 32504, 31967, 34888, 33317, 33590, 33851, 31933, 32238, 30996, 30725, 30935, 31164, 31043, 31318, 30923, 31212, 31783, 30559, 30644, 29657, 29345, 28592, 28446, 28072, 28038, 26713, 26932, 26502, 26453, 26233, 25534, 25884, 25458, 25528, 25477, 24449, 23993, 23081, 22565, 22127, 22383, 22007, 21631, 22956, 22177, 22353, 23747, 23584, 23076, 24023, 23632, 25131, 25167, 26093, 27083, 27818, 29730, 30321, 30969, 33072, 33205, 35367, 36424, 34674, 35609, 31946, 31886, 29786, 30597, 30509, 26102, 22540, 22002, 21288, 21439, 21279, 21449, 21717, 21804, 23173, 23773, 25103, 24863, 25712, 27402, 28304, 27439, 28615, 30195, 31033, 32722, 34647, 37269, 40363, 44454, 48603, 52863, 60866, 65854, 72494, 82808, 92809, 108692, 122077, 134854, 147637, 161127, 176952, 187052, 194215, 207081, 207999, 217610, 222034, 211863, 217787, 212081, 188487, 191786, 162934, 150519, 130783, 107188, 95938, 83655, 70535, 56960, 49088, 40258, 33021, 27880, 23754, 20946, 19717, 18433, 17345, 15899, 15625, 15694, 13702, 13731, 12531, 12715, 11879, 11737, 11599, 11851, 12048, 12702, 11435, 13030, 11715, 13688, 13939, 11691, 14717, 12548, 11497, 12323, 9365, 9268, 7075, 5223, 4846, 4094, 3642, 3322, 3084, 2819, 2579, 2396, 2202, 2153, 1894, 1847, 1665, 1677, 1577, 1446, 1424, 1406, 1268, 1383, 1356, 1422, 1461, 1531, 1737, 1883, 2107, 2265, 3293, 11736]
In [ ]:
print(list_of_R_strings)
['5634', '3357', '3197', '3209', '3132', '2988', '3040', '2692', '2338', '2395', '2063', '1874', '1695', '1571', '1437', '1294', '1248', '1245', '1278', '1235', '1214', '1274', '1157', '1218', '1073', '1015', '1058', '1031', '1063', '1152', '1040', '1026', '1022', '954', '1054', '1055', '1134', '1203', '1221', '1178', '1251', '1357', '1493', '1618', '1708', '1959', '2075', '2351', '2348', '2318', '2343', '2232', '1919', '1836', '1701', '1491', '1330', '1135', '1096', '995', '995', '837', '817', '751', '656', '594', '573', '506', '544', '533', '528', '539', '546', '547', '479', '491', '460', '509', '528', '491', '456', '455', '471', '465', '454', '406', '437', '396', '413', '375', '390', '396', '353', '376', '385', '331', '408', '378', '419', '418', '419', '444', '490', '523', '566', '519', '527', '610', '620', '713', '731', '895', '865', '1010', '973', '982', '1039', '1058', '1022', '956', '825', '732', '740', '756', '755', '805', '874', '946', '896', '960', '964', '958', '983', '905', '818', '770', '704', '583', '444', '360', '340', '337', '274', '301', '300', '278', '283', '277', '339', '334', '432', '444', '403', '418', '397', '360', '434', '450', '443', '436', '423', '333', '314', '250', '245', '239', '232', '208', '169', '175', '158', '150', '151', '168', '157', '100', '80', '74', '56', '57', '56', '58', '45', '43', '28', '37', '23', '30', '22', '26', '29', '23', '18', '22', '28', '24', '24', '16', '18', '14', '15', '18', '27', '28', '26', '17', '16', '24', '10', '16', '18', '15', '20', '15', '12', '9', '13', '12', '17', '11', '9', '18', '17', '14', '14', '13', '20', '13', '16', '13', '15', '12', '13', '12', '8', '10', '11', '17', '6', '11', '7', '11', '6', '7', '11', '9', '9', '6', '6', '10', '10', '13', '12', '26', '48', '139']
In [ ]:
print(list_of_G_strings)
['']
In [ ]:
df[6680:6685]
Out[ ]:
name mode format size R G B source datetime resolutionUnit ... brightness aperture phonemake phonemodel ISOspeedratings flash focallength sensingmethod height width
6680 car2607 RGB JPEG (277, 182) [254, 71, 65, 79, 124, 107, 136, 143, 146, 180... [1680, 531, 559, 606, 505, 589, 532, 577, 563,... [813, 191, 255, 252, 348, 395, 396, 449, 464, ... downloaded NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN 277 182
6681 car2608 RGB JPEG (300, 225) [298, 1005, 266, 770, 529, 755, 593, 510, 673,... [33, 1055, 185, 678, 407, 461, 483, 565, 532, ... [323, 957, 271, 719, 490, 518, 703, 436, 544, ... downloaded NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN 300 225
6682 car2609 L JPEG (500, 334) [5634, 3357, 3197, 3209, 3132, 2988, 3040, 269... [] [] downloaded NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN 500 334
6683 car2610 RGB JPEG (300, 225) [498, 204, 220, 275, 283, 314, 315, 358, 367, ... [59, 122, 148, 174, 205, 203, 228, 238, 235, 2... [914, 214, 293, 358, 376, 414, 481, 486, 551, ... downloaded 0000:00:00 00:00:00 2.0 ... NaN NaN NIKON E2500 100 24 (56, 10) NaN 300 225
6684 car2611 RGB JPEG (259, 194) [488, 111, 104, 91, 170, 157, 202, 186, 234, 2... [307, 93, 98, 90, 151, 132, 175, 194, 223, 248... [107, 16, 123, 34, 205, 128, 159, 177, 188, 23... downloaded NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN 259 194

5 rows × 22 columns

In [ ]:
R_pixels_list = list()
G_pixels_list = list()
B_pixels_list = list()
final_R_list = list()
final_G_list = list()
final_B_list = list()

for index, row in df.iterrows():
  try: 
    initial_R_list = row['R']
    initial_G_list = row['G']
    initial_B_list = row['B']
    list_of_R_strings = initial_R_list.strip('][').split(', ')
    list_of_G_strings = initial_G_list.strip('][').split(', ')
    list_of_B_strings = initial_B_list.strip('][').split(', ')
    list_of_R_ints = list(map(int, list_of_R_strings))
    list_of_G_ints = list(map(int, list_of_G_strings))
    list_of_B_ints = list(map(int, list_of_B_strings))
    final_R_list.append(list_of_R_ints)
    final_G_list.append(list_of_G_ints)
    final_B_list.append(list_of_B_ints)
  except:
    #TODO: inwestigate this 3 indexes: 6682, 6807, 6851
    print("wrong index: ", index)
    print(initial_R_list)
    print(initial_G_list)
    print(initial_B_list)
    # print(list_of_R_strings)
    # print(list_of_G_strings)
    # print(list_of_R_ints)
    # print(list_of_G_ints)

R_pixels_list = [sum(x) for x in zip(*final_R_list)]
G_pixels_list = [sum(x) for x in zip(*final_G_list)]
B_pixels_list = [sum(x) for x in zip(*final_B_list)]
print(type(G_pixels_list))
print(G_pixels_list)
wrong index:  6682
[5634, 3357, 3197, 3209, 3132, 2988, 3040, 2692, 2338, 2395, 2063, 1874, 1695, 1571, 1437, 1294, 1248, 1245, 1278, 1235, 1214, 1274, 1157, 1218, 1073, 1015, 1058, 1031, 1063, 1152, 1040, 1026, 1022, 954, 1054, 1055, 1134, 1203, 1221, 1178, 1251, 1357, 1493, 1618, 1708, 1959, 2075, 2351, 2348, 2318, 2343, 2232, 1919, 1836, 1701, 1491, 1330, 1135, 1096, 995, 995, 837, 817, 751, 656, 594, 573, 506, 544, 533, 528, 539, 546, 547, 479, 491, 460, 509, 528, 491, 456, 455, 471, 465, 454, 406, 437, 396, 413, 375, 390, 396, 353, 376, 385, 331, 408, 378, 419, 418, 419, 444, 490, 523, 566, 519, 527, 610, 620, 713, 731, 895, 865, 1010, 973, 982, 1039, 1058, 1022, 956, 825, 732, 740, 756, 755, 805, 874, 946, 896, 960, 964, 958, 983, 905, 818, 770, 704, 583, 444, 360, 340, 337, 274, 301, 300, 278, 283, 277, 339, 334, 432, 444, 403, 418, 397, 360, 434, 450, 443, 436, 423, 333, 314, 250, 245, 239, 232, 208, 169, 175, 158, 150, 151, 168, 157, 100, 80, 74, 56, 57, 56, 58, 45, 43, 28, 37, 23, 30, 22, 26, 29, 23, 18, 22, 28, 24, 24, 16, 18, 14, 15, 18, 27, 28, 26, 17, 16, 24, 10, 16, 18, 15, 20, 15, 12, 9, 13, 12, 17, 11, 9, 18, 17, 14, 14, 13, 20, 13, 16, 13, 15, 12, 13, 12, 8, 10, 11, 17, 6, 11, 7, 11, 6, 7, 11, 9, 9, 6, 6, 10, 10, 13, 12, 26, 48, 139]
[]
[]
wrong index:  6807
[1112, 1615, 2108, 2202, 1989, 1794, 1621, 1516, 1555, 1910, 2067, 1923, 2255, 2738, 2608, 2296, 2246, 2099, 1959, 1902, 1692, 1582, 1566, 1393, 1272, 1180, 1175, 1133, 1059, 1022, 996, 973, 1045, 988, 911, 871, 890, 895, 868, 802, 707, 677, 650, 628, 650, 656, 639, 643, 746, 749, 708, 816, 886, 801, 826, 904, 774, 763, 773, 826, 741, 730, 755, 869, 790, 809, 880, 781, 808, 786, 796, 851, 826, 722, 631, 605, 548, 570, 637, 612, 562, 634, 608, 626, 593, 565, 583, 528, 483, 501, 506, 508, 533, 551, 565, 606, 610, 653, 618, 569, 568, 563, 548, 533, 500, 505, 516, 467, 476, 486, 480, 487, 492, 477, 436, 410, 424, 419, 377, 376, 359, 351, 299, 324, 332, 293, 317, 335, 311, 286, 292, 307, 327, 347, 343, 397, 390, 400, 376, 411, 412, 423, 445, 436, 463, 426, 481, 460, 524, 491, 439, 485, 481, 483, 563, 502, 541, 579, 547, 563, 553, 575, 585, 589, 617, 570, 563, 619, 587, 589, 555, 593, 564, 592, 655, 590, 607, 617, 616, 627, 641, 624, 607, 620, 618, 634, 637, 647, 623, 643, 672, 666, 695, 733, 741, 684, 680, 700, 659, 673, 675, 680, 671, 650, 673, 749, 703, 629, 687, 648, 687, 658, 659, 689, 691, 639, 653, 691, 683, 659, 722, 773, 716, 693, 709, 648, 587, 606, 587, 615, 628, 563, 544, 529, 560, 462, 511, 474, 487, 501, 539, 598, 711, 788, 965, 1231, 1563, 2075, 2278, 3581, 7572, 8074, 18981, 32343, 191175, 28197]
[]
[]
wrong index:  6851
[370, 76, 33, 41, 48, 45, 52, 80, 82, 102, 134, 135, 175, 255, 291, 440, 527, 613, 653, 766, 805, 939, 1042, 1171, 1289, 1482, 1677, 1927, 1927, 2145, 2272, 2343, 2387, 2415, 2431, 2461, 2334, 2523, 2559, 2577, 2557, 2629, 2667, 2683, 2419, 2092, 1731, 1415, 1227, 965, 856, 721, 611, 555, 524, 444, 430, 366, 368, 339, 291, 270, 298, 295, 261, 240, 221, 246, 231, 229, 197, 197, 216, 202, 207, 210, 210, 202, 206, 212, 187, 197, 207, 212, 174, 188, 215, 230, 224, 215, 251, 219, 239, 223, 246, 204, 187, 208, 206, 203, 196, 172, 189, 196, 191, 192, 195, 216, 181, 185, 187, 214, 187, 174, 194, 182, 176, 159, 193, 182, 186, 195, 200, 146, 147, 151, 149, 161, 157, 159, 154, 148, 134, 130, 125, 151, 154, 129, 138, 143, 135, 130, 132, 136, 145, 124, 114, 129, 115, 96, 108, 84, 93, 87, 89, 84, 93, 98, 111, 115, 132, 140, 145, 192, 189, 179, 189, 185, 223, 187, 170, 212, 173, 174, 155, 164, 149, 147, 145, 179, 143, 108, 108, 80, 67, 53, 61, 56, 59, 47, 48, 48, 45, 48, 37, 46, 35, 25, 31, 37, 39, 38, 53, 56, 41, 42, 55, 50, 55, 54, 57, 55, 40, 55, 64, 54, 58, 59, 74, 94, 80, 81, 94, 87, 79, 106, 122, 128, 142, 150, 197, 239, 327, 369, 383, 381, 282, 261, 190, 168, 146, 127, 134, 98, 92, 71, 73, 41, 41, 39, 25, 20, 18, 17, 59, 294]
[]
[]
<class 'list'>
[26367996, 17168771, 12732694, 13513116, 13386689, 13916225, 15047818, 15733246, 16572498, 17544265, 18136594, 18702041, 19772420, 20279767, 21317247, 22249357, 23301515, 24256538, 24729614, 25244377, 25799399, 26378756, 27225030, 28072518, 28603220, 29022775, 29532346, 30106853, 30637687, 31149637, 31894501, 32876691, 33907954, 33971768, 34477022, 35112652, 35513631, 35799820, 36260867, 36614506, 37076406, 37243369, 37408792, 37683915, 37923655, 38255973, 38626247, 38925842, 39388127, 39625547, 40014040, 40272337, 40560578, 40957372, 41147689, 41478754, 42047267, 42284170, 42762794, 43259434, 43792610, 44485531, 45114353, 45761058, 46693008, 47566386, 48512358, 49399211, 50145536, 50964535, 51824740, 52877348, 54037419, 55115113, 56168688, 57032228, 57413289, 57891377, 58365465, 58863206, 59367863, 59708172, 60102183, 60582979, 61405703, 62311191, 62957157, 63344336, 63571285, 63658515, 63697596, 63796076, 64055907, 64482055, 64975396, 65684036, 66528142, 66389412, 66628320, 66857724, 66976962, 66784358, 66991284, 67473179, 67899005, 68178226, 68470412, 68582338, 68476839, 68336977, 68294720, 67993517, 67515183, 66964123, 66185065, 65680866, 65543508, 65152966, 65283345, 65125667, 64954819, 64582060, 64115971, 63716152, 62810321, 62122302, 61569756, 60999130, 60867003, 59672402, 59117464, 58777110, 58176435, 57775476, 57373448, 57327440, 57938899, 56786481, 56542564, 56205589, 55791376, 55335879, 54920324, 54769039, 54231173, 53737750, 52549557, 51390311, 50624580, 49977073, 49618359, 48985498, 48479407, 47662697, 46984367, 46292704, 45546447, 45212024, 44220126, 43421021, 43008033, 41990947, 41664939, 41004890, 40392691, 39940710, 39195117, 38779734, 38334811, 38049384, 37749422, 37387979, 37589344, 36828903, 36523810, 36248838, 35915497, 35659775, 35492389, 35182627, 35107951, 35056939, 34913544, 34896346, 34130234, 33736925, 33442032, 32908715, 32856870, 32676405, 32293509, 31524577, 30768840, 29886798, 29049211, 28466243, 27921312, 27355444, 27070015, 26444380, 25901373, 25538451, 25345843, 25348888, 25253091, 24963557, 24856918, 24897374, 24356830, 23672591, 22924977, 22361564, 22056629, 21932217, 21876413, 21108476, 20221939, 19611886, 19165581, 19219626, 18386496, 18178095, 17549998, 16525536, 15774956, 15216217, 14529805, 14082248, 13606213, 13454304, 13345629, 12931645, 12618185, 12390594, 12246610, 12234706, 11998799, 11740353, 11651948, 11482041, 11166027, 11112052, 10569230, 9903622, 9606862, 9034394, 8908686, 8674985, 8782007, 8727638, 8950373, 9414729, 11117485, 16246987, 28585653, 116730574]
In [ ]:
number_of_pictures = len(df)
number_of_pictures
Out[ ]:
8699
In [ ]:
finalRedList = [x / number_of_pictures for x in R_pixels_list]
finalGreenList = [x / number_of_pictures for x in G_pixels_list]
finalBlueList = [x / number_of_pictures for x in B_pixels_list]
print(finalRedList)
print(finalGreenList)
print(finalBlueList)
[3738.897919301069, 1845.9391884124611, 1403.0836877802046, 1682.4174042993448, 1577.9681572594552, 1669.9779284975284, 1851.8079089550522, 1876.2238188297506, 2002.7376709966663, 2063.605012070353, 2171.678698701, 2247.786872054259, 2339.3841820898956, 2452.067479020577, 2542.5653523393494, 2652.7034141855383, 2787.1203586619154, 2857.2933670536845, 2960.8966547879068, 3039.8850442579605, 3112.3811932406024, 3207.885963903897, 3310.310955282216, 3401.165766180021, 3488.2203701574895, 3550.044028049201, 3632.89458558455, 3687.464306242097, 3763.605701804805, 3811.7313484308543, 3922.9519484998277, 3967.719163122198, 4028.5704103919993, 4027.146798482584, 4037.5346591562247, 4088.8467639958617, 4142.062880790895, 4161.5911024255665, 4186.638924014254, 4186.55466145534, 4205.896999655133, 4236.278192895735, 4214.35682262329, 4261.324520059777, 4286.996206460512, 4290.364294746522, 4348.871709391884, 4367.493045177606, 4383.688010116105, 4402.6283480859865, 4441.04563742959, 4477.466490401195, 4478.076215656972, 4525.379813771698, 4547.165996091505, 4542.359696516841, 4577.879526382343, 4624.871019657432, 4629.493734912059, 4671.661570295436, 4746.7295091389815, 4827.881825497184, 4876.058512472698, 4959.051155305207, 5047.618002069204, 5095.2614093573975, 5204.537992872744, 5295.585929417174, 5371.5823657891715, 5461.737785952409, 5552.460282791126, 5629.127370962179, 5684.647890562133, 5758.351304747672, 5825.404299344752, 5879.917576732958, 5942.013334866077, 5998.831244970686, 6085.065754684447, 6171.52649729854, 6263.82469249339, 6353.02368088286, 6408.855960455225, 6497.071272560064, 6574.838602138177, 6652.868490631107, 6734.39234394758, 6773.732153121048, 6822.531670306932, 6861.553626853662, 6880.918151511668, 6903.052304862628, 6921.178411311645, 6962.974709736752, 6998.898034256811, 7053.63869410277, 7163.778595240832, 7164.99264283251, 7201.154270605817, 7239.668812507185, 7299.092654328084, 7341.107483618806, 7390.030578227383, 7429.327968732038, 7451.888148062996, 7520.599034371767, 7600.487297390505, 7633.175422462352, 7663.038510173583, 7686.31566846764, 7695.633176227153, 7686.979652833659, 7690.134843085412, 7670.500057477871, 7638.062420967927, 7686.201862283021, 7643.599724106219, 7641.296240947236, 7691.551212783079, 7728.081963444074, 7721.213702724451, 7700.113461317393, 7658.616852511783, 7608.684676399586, 7536.67191631222, 7457.691573744109, 7398.596045522474, 7330.1417404299345, 7342.8572249683875, 7188.495574203932, 7114.596160478216, 7084.707207725026, 6996.562708357283, 6937.9128635475345, 6862.061616277733, 6798.487067479021, 6876.5364984480975, 6675.38613633751, 6656.027129555121, 6591.080813886653, 6509.257270950684, 6498.917346821474, 6401.701115070698, 6360.551902517531, 6295.045177606621, 6203.140016093804, 6142.689619496494, 6002.253937234165, 5928.162202552017, 5828.647430739165, 5718.515461547304, 5682.363490056328, 5623.860098861938, 5534.392803770548, 5521.468559604552, 5465.090815036211, 5409.476836417979, 5357.871594436142, 5264.333256696172, 5170.407748017014, 5116.5373031382915, 5013.227497413496, 4927.031497873319, 4822.680308081389, 4771.328198643522, 4718.500287389355, 4631.04230371307, 4607.340843775147, 4555.932635935165, 4514.212438211289, 4506.012989998851, 4482.7476721462235, 4425.435912173813, 4406.791240372457, 4342.083113001494, 4325.0412691113925, 4285.350959880446, 4207.438326244396, 4175.062995746637, 4101.8576847913555, 4123.354753419933, 4098.423726865157, 4014.8456144384413, 3982.160708127371, 3919.1859983906197, 3869.196574318887, 3809.5835153465914, 3738.1285205196, 3709.408782618692, 3674.674905161513, 3681.999770088516, 3664.198183699276, 3571.9811472583056, 3483.05241981837, 3389.9977008851592, 3316.762271525463, 3325.2675020117254, 3266.7615817910105, 3218.9371192091044, 3158.4309690769055, 3084.2956661685253, 3044.6720312679618, 2969.994712035866, 2942.1027704333833, 2939.9574663754456, 2866.1189791930105, 2840.876652488792, 2804.6152431313944, 2739.0458673410735, 2718.6709966662834, 2673.81848488332, 2606.266582365789, 2555.692838257271, 2540.728934360271, 2563.988964248764, 2516.7081273709623, 2450.4724680997815, 2418.596620301184, 2355.043223359007, 2407.0692033567075, 2273.351534659156, 2227.3227957236463, 2157.119898838947, 2039.110817335326, 1956.4346476606506, 1860.1966892746293, 1839.4995976549028, 1789.552707207725, 1726.5333946430624, 1706.7089320611565, 1667.7756063915392, 1633.3824577537648, 1604.131394413151, 1569.4686745602942, 1538.9929876997355, 1521.2946315668469, 1485.9011380618463, 1448.2419818369929, 1434.4655707552593, 1378.4570640303484, 1373.0214967237614, 1348.874123462467, 1279.0279342453155, 1236.6460512702608, 1220.5513277388206, 1193.6340958730889, 1187.9621795608691, 1187.0926543280837, 1204.0149442464651, 1190.3822278422808, 1235.222439360846, 1316.4989079204506, 1490.506265087941, 1913.502586504196, 3340.1702494539604, 16179.285550063225]
[3031.1525462696864, 1973.6488102080698, 1463.696286929532, 1553.4102770433383, 1538.876767444534, 1599.7499712610645, 1729.833084262559, 1808.6269686170824, 1905.1038050350614, 2016.8140016093803, 2084.905621335786, 2149.90700080469, 2272.95321301299, 2331.2756638694104, 2450.5399471203586, 2557.6913438326246, 2678.642947465226, 2788.4283250948383, 2842.8111277158296, 2901.986090355213, 2965.789056213358, 3032.389470054029, 3129.6735256926086, 3227.0971376020234, 3288.1043798137716, 3336.3346361650765, 3394.912748591792, 3460.955627083573, 3521.9780434532704, 3580.8296355902976, 3666.45602942867, 3779.3644097022648, 3897.9140131049544, 3905.2497988274513, 3963.3316473157834, 4036.4009656282333, 4082.4958041154155, 4115.394872973905, 4168.394872973905, 4209.047706632947, 4262.145763880906, 4281.339119439016, 4300.355443154385, 4331.982411771468, 4359.541901367973, 4397.743763650994, 4440.308886078859, 4474.749051615128, 4527.891366823773, 4555.184159098747, 4599.843660190826, 4629.5363834923555, 4662.67134153351, 4708.285090240258, 4730.163122197954, 4768.2209449362, 4833.574778710196, 4860.808138866536, 4915.828715944362, 4972.920335670767, 5034.211978388321, 5113.8672261179445, 5186.15392573859, 5260.496378894126, 5367.629382687665, 5468.029198758478, 5576.774111966893, 5678.722956661685, 5764.517300839177, 5858.665938613633, 5957.551442694563, 6078.554776411082, 6211.911599034372, 6335.798712495689, 6456.91320841476, 6556.18208989539, 6599.987239912633, 6654.946200712726, 6709.44533854466, 6766.663524543051, 6824.676744453385, 6863.797218071043, 6909.091044947695, 6964.36130589723, 7058.938153810783, 7163.029198758478, 7237.286699620646, 7281.795148867686, 7307.884239567767, 7317.911828945856, 7322.404414300494, 7333.725255776526, 7363.594321186343, 7412.5824807449135, 7469.294861478331, 7550.7570985170705, 7647.791930106909, 7631.844120013795, 7659.307966432923, 7685.67927347971, 7699.386366248994, 7677.245430509254, 7701.032762386481, 7756.429359696517, 7805.3805035061505, 7837.47856075411, 7871.067019197609, 7883.933555581101, 7871.805839751695, 7855.727899758593, 7850.870214967237, 7816.24520059777, 7761.257960685136, 7697.910449476952, 7608.3532589952865, 7550.392688814806, 7534.60259799977, 7489.707552592252, 7504.695367283596, 7486.569375790321, 7466.929417174388, 7424.0786297275545, 7370.499022876193, 7324.537533049775, 7220.407058282562, 7141.315323600414, 7077.796988159558, 7012.200252902632, 6997.011495574204, 6859.685251178296, 6795.891941602483, 6756.766294976434, 6687.715254626969, 6641.622715254627, 6595.407288194046, 6590.1184044143, 6660.409127485918, 6527.932061156454, 6499.892401425451, 6461.155190251753, 6413.539027474422, 6361.177031842741, 6313.406598459593, 6296.015519025175, 6234.184733877457, 6177.4629267731925, 6040.873318772273, 5907.611334636165, 5819.586159328658, 5745.1515116680075, 5703.915277618117, 5631.164271755374, 5572.9862053109555, 5479.100701230026, 5401.122772732498, 5321.612139326359, 5235.825612139326, 5197.381768019312, 5083.357397402, 4991.495689159674, 4944.020347166341, 4827.100471318542, 4789.623979767789, 4713.7475571904815, 4643.371766869755, 4591.413955627084, 4505.703759052764, 4457.953098057248, 4406.80664444189, 4373.9951718588345, 4339.512817565237, 4297.962869295321, 4321.110932291068, 4233.693872858949, 4198.621680652948, 4167.012070352914, 4128.6926083457865, 4099.295896080009, 4080.0539142430166, 4044.444993677434, 4035.860558684906, 4029.996436371997, 4013.512357742269, 4011.535348890677, 3923.4663754454537, 3878.2532474997124, 3844.353603862513, 3783.0457523853315, 3777.085871939303, 3756.3403839521784, 3712.324290148293, 3623.9311415105185, 3537.0548338889525, 3435.659041269111, 3339.373606161628, 3272.3580871364525, 3209.7151396712266, 3144.6653638349235, 3111.853661340384, 3039.9333256696173, 2977.5115530520748, 2935.7915852396827, 2913.650189676974, 2914.000229911484, 2902.987814691344, 2869.7042188757327, 2857.4454535004024, 2862.096103000345, 2799.9574663754456, 2721.3002643982068, 2635.3577422692265, 2570.5901827796297, 2535.5361535808715, 2521.234279802276, 2514.819289573514, 2426.540521899069, 2324.6280032187606, 2254.4989079204506, 2203.1935854695944, 2209.406368548109, 2113.6332911828945, 2089.6763995861593, 2017.4730428784917, 1899.7052534774111, 1813.4217726175423, 1749.1915162662374, 1670.2845154615472, 1618.8352684216577, 1564.1123117599725, 1546.6494999425222, 1534.1566846763997, 1486.566846763996, 1450.5328198643522, 1424.3699275778824, 1407.8181400160938, 1406.4497068628577, 1379.3308426255892, 1349.6209909184963, 1339.4583285435108, 1319.9265432808368, 1283.5989194160247, 1277.3941832394528, 1214.993677434188, 1138.4782158868836, 1104.3639498792966, 1038.555466145534, 1024.1046097252558, 997.2393378549259, 1009.5421312794574, 1003.2921025405219, 1028.8967697436487, 1082.2771582940568, 1278.0187377859525, 1867.6844464881021, 3286.084952293367, 13418.849752845155]
[4350.567996321416, 1757.398206690424, 1470.7899758592941, 1580.2319806874352, 1655.573169329808, 1743.1530060926543, 1785.193125646626, 1865.470398896425, 1928.642832509484, 2011.5321301299, 2050.986090355213, 2146.3139441315093, 2256.625819059662, 2298.6563972870445, 2393.274974134958, 2464.836188067594, 2572.946545579952, 2649.1824347626166, 2762.435337395103, 2828.5802965858143, 2925.4218875732845, 2994.9163122197956, 3101.2919875847797, 3186.380043683182, 3242.949649384987, 3319.0074721232327, 3386.1077135302908, 3429.835498333142, 3495.783423381998, 3537.866306472008, 3613.7415794918957, 3675.824462581906, 3774.5827106563975, 3796.3372801471432, 3861.5828256121395, 3935.0773652143926, 4052.316013334866, 4107.300264398206, 4153.583630302333, 4214.326474307391, 4257.532360041384, 4320.874008506725, 4348.231865731694, 4388.627198528567, 4438.382802620991, 4448.83090010346, 4506.927922749741, 4544.798022761237, 4585.26439820669, 4618.587078974595, 4634.986895045407, 4700.966547879067, 4759.535693757904, 4814.306472008277, 4889.156109897689, 4928.262558914817, 5001.236119094148, 5073.100701230026, 5088.169214852282, 5136.779399931027, 5174.046097252558, 5267.388895275319, 5312.3530290838025, 5371.312104839637, 5483.934015404069, 5552.872743993563, 5646.874238418209, 5754.727554891367, 5821.022301413956, 5947.145763880906, 6063.971720887458, 6197.836188067594, 6298.295206345557, 6398.179560869065, 6535.478330842626, 6659.810782848604, 6780.359006782389, 6906.476491550753, 7006.9498792964705, 7072.172088745833, 7150.520979422922, 7206.281756523738, 7293.394528106679, 7368.658351534659, 7429.4082078399815, 7511.289918381423, 7595.665823657891, 7685.075640878262, 7769.743418783768, 7824.420278192896, 7851.01747327279, 7886.269226347856, 7934.6012185308655, 7989.8486032877345, 8016.037820439131, 8058.162892286469, 8112.939188412462, 8093.886193815381, 8111.01184044143, 8099.877457178986, 8086.476721462237, 8050.3353258995285, 8018.475112081848, 8008.742154270606, 7972.1881825497185, 7933.104954592482, 7886.148752730199, 7830.132199103346, 7776.23336015634, 7723.33819979308, 7671.309690769054, 7617.023910794344, 7539.16909989654, 7470.972985400621, 7403.963214162547, 7341.534084377515, 7280.1425451201285, 7223.457064030348, 7197.651799057363, 7150.809403379699, 7104.423037130705, 7069.168180250604, 7011.164501666858, 6930.195309805725, 6857.7937693987815, 6794.292102540522, 6755.149097597425, 6717.146223703874, 6728.752615243131, 6636.3530290838025, 6586.443844120014, 6543.102770433383, 6505.015519025175, 6444.480629957467, 6401.744913208415, 6356.223703874009, 6416.286239797678, 6280.208989539027, 6235.868720542591, 6200.638464191286, 6145.846189217152, 6066.108748131969, 6016.136107598574, 5962.662834808599, 5912.120243706173, 5868.046327164042, 5825.481089780435, 5816.8665363834925, 5720.126796183469, 5637.854236119094, 5576.528681457638, 5492.0135647775605, 5496.01184044143, 5392.3439475801815, 5319.267272100242, 5254.579606851362, 5186.616162777331, 5140.079664329233, 5051.054718933211, 4949.704103919991, 4913.669962064605, 4775.323140590873, 4717.012415220141, 4640.742844005058, 4567.912173813082, 4539.30267846879, 4503.309001034601, 4456.657661800207, 4410.21473732613, 4366.394413150937, 4350.278767674446, 4325.534659156225, 4283.377744568341, 4236.161742729049, 4156.434302793425, 4085.5619036670882, 4042.3342912978505, 3992.0973675135074, 3966.582135877687, 3917.2791125416716, 3888.439015978848, 3917.101620875963, 3830.4343027934246, 3740.725600643752, 3680.664329233245, 3590.2495689159673, 3564.30888607886, 3540.3848718243476, 3475.1542706058167, 3497.1559949419475, 3477.6398436601908, 3439.498218185998, 3368.4084377514655, 3221.859179216002, 3168.707322680768, 3127.7418094033796, 3093.213012989999, 3079.9079204506265, 2978.178526267387, 2967.021266812277, 2882.3667088171055, 2863.0573629152777, 2837.982641682952, 2796.350729968962, 2789.0155190251753, 2736.21588688355, 2699.055983446373, 2693.664444188987, 2631.7967582480746, 2619.2264628118173, 2588.128635475342, 2515.4491320841475, 2488.595930566732, 2377.2240487412346, 2307.128405563858, 2249.8474537303136, 2177.669157374411, 2164.0043683181975, 2010.181170249454, 2012.4352224393608, 1879.5340843775145, 1862.6073111851938, 1850.7059432118635, 1818.6537533049775, 1757.7726175422463, 1736.008621680653, 1675.0663294631568, 1656.3511897919302, 1631.7230716174272, 1583.4813196919185, 1603.599264283251, 1546.4548798712497, 1534.2512932520979, 1494.2237038740086, 1525.5335095988044, 1457.9337854925855, 1476.5369582710657, 1456.239452810668, 1435.3840671341534, 1417.9935624784457, 1347.101850787447, 1365.2127830785148, 1266.2416369697667, 1312.8006667433037, 1279.5931716289228, 1242.5716749051614, 1302.3555581101275, 1220.5832854351074, 1279.4670651799058, 1197.3207265202898, 1335.9670077020346, 1366.4360271295552, 1380.839176916887, 1992.0341418553858, 2835.0014944246464, 14684.208874583286]
In [ ]:
def getRed(R): return '#%02x%02x%02x'%(R,0,0)
def getGreen(G): return '#%02x%02x%02x'%(0,G,0)
def getBlue(B):return '#%02x%02x%02x'%(0,0,B)
In [ ]:
plt.figure(0) # plots a figure to display RED Histogram
for i in range(0, 256):
  plt.title("Histogram of RED pixels")
  plt.xlabel('Wartość pixela')
  plt.ylabel('Ilość pixeli') 
  plt.bar(i, finalRedList[i], color = getRed(i)) #, alpha=0.3
In [ ]:
red = finalRedList     # indicates Red
green = finalGreenList  # indicated Green
blue = finalBlueList   # indicates Blue

plt.figure(0) # plots a figure to display RED Histogram
for i in range(0, 256):
  plt.title("Histogram of RED pixels")
  plt.xlabel('Value of pixel') # Wartość pixela
  plt.ylabel('Number of pixels') # Ilość pixeli
  plt.bar(i, red[i], color = getRed(i)) #, alpha=0.3
plt.savefig(plots + '/red_bar_hist.jpg', dpi=600)

plt.figure(1) # plots a figure to display GREEN Histogram
for i in range(0, 256):
  plt.title("Histogram of GREEN pixels")
  plt.xlabel('Value of pixel') 
  plt.ylabel('Number of pixels')
  plt.bar(i, green[i], color = getGreen(i))
plt.savefig(plots + '/green_bar_hist.jpg', dpi=600)

plt.figure(2) # plots a figure to display BLUE Histogram
for i in range(0, 256):
  plt.title("Histogram of BLUE pixels")
  plt.xlabel('Value of pixel') 
  plt.ylabel('Number of pixels')
  plt.bar(i, blue[i], color = getBlue(i))
plt.savefig(plots + '/blue_bar_hist.jpg', dpi=600)

plt.figure(3) # plots a figure to display RGB Histogram
for i in range(0, 256):
  plt.title("Bar histogram of RGB pixels")
  plt.xlabel('Value of pixel') 
  plt.ylabel('Number of pixels')
  plt.bar(i, blue[i], color = getBlue(i))
  plt.bar(i, red[i], color = getRed(i))
  plt.bar(i, green[i], color = getGreen(i))
plt.savefig(plots + '/RGB_bar_hist.jpg', dpi=600)

plt.figure(4) # plots a figure to display RGB Histogram
plt.title("Line histogram of RGB pixels")
plt.xlabel('Value of pixel') 
plt.ylabel('Number of pixels')
plt.plot(red, color='red')
plt.plot(green, color='green')
plt.plot(blue, color='blue')
plt.savefig(plots + '/RGB_line_hist.jpg', dpi=600)

plt.show()

Investigating outliers (grayscale photos)

  • Creating histograms went smoothly, however, error happened in 3 cases: indexes 6682, 6807 and 6851. There was a lack of 'G' and 'B' row values ( just empty list)
  • Answer comes: this 3 images has mode 'L', which means grayscale. That is why only one list of pixels histograms were loaded. We decide to leave this 3 images in our dataset (3/8800 = 0.00034 = 0,034%).
In [ ]:
df.iloc[[6682, 6807, 6851],:]
Out[ ]:
name mode format size R G B source datetime resolutionUnit ... brightness aperture phonemake phonemodel ISOspeedratings flash focallength sensingmethod height width
6682 car2609 L JPEG (500, 334) [5634, 3357, 3197, 3209, 3132, 2988, 3040, 269... [] [] downloaded NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN 500 334
6807 car2734 L JPEG (800, 600) [1112, 1615, 2108, 2202, 1989, 1794, 1621, 151... [] [] downloaded NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN 800 600
6851 car2778 L JPEG (392, 250) [370, 76, 33, 41, 48, 45, 52, 80, 82, 102, 134... [] [] downloaded NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN 392 250

3 rows × 22 columns

  • car2778 image.png
  • car2734 image.png
  • car2609 image.png

Data Preprocessing:

  • format bmp i gif -> JPEG
  • image height and width: cut or extend (to eg. 64x64 size) ### After EDA, we conclude that median value of image height is 256 pixels, and median value for image width is also 256. 3000 pictures out of 9000 (8800) (about 34%) falls under this condition. Thus, we decide to resize all the images to the size of 256x256 (rectangle shape).
  • About 1200 (1180) pictures has shape smaller then 256x256. In their case, because their will be resized to higher shape, the photo will be stretched.
  • Alternatively, if strething will fail, the black stipes will be added at the edges of the photo.
In [ ]:
cwd = os.getcwd()  # Get the current working directory (cwd)
files = os.listdir(cwd + '/drive/MyDrive/2022_Projekt_badawczy/ZPD_SZUM/finaldata/car')  # Get all the files in that directory
print("Files in %r: %s" % (cwd, files))
Files in '/content': ['car2533.JPEG', 'car2534.JPEG', 'car2535.JPEG', 'car2536.JPEG', 'car2537.JPEG', 'car2538.JPEG', 'car2539.JPEG', 'car2540.JPEG', 'car2541.JPEG', 'car2542.JPEG', 'car2543.JPEG', 'car2544.JPEG', 'car2545.JPEG', 'car2546.JPEG', 'car2547.JPEG', 'car2548.JPEG', 'car2549.JPEG', 'car2550.JPEG', 'car2551.JPEG', 'car2552.JPEG', 'car2553.JPEG', 'car2554.JPEG', 'car2555.JPEG', 'car2556.JPEG', 'car2557.JPEG', 'car2558.JPEG', 'car2559.JPEG', 'car2560.JPEG', 'car2561.JPEG', 'car2562.JPEG', 'car2563.JPEG', 'car2564.JPEG', 'car2565.JPEG', 'car2566.JPEG', 'car2567.JPEG', 'car2568.JPEG', 'car2569.JPEG', 'car2570.JPEG', 'car2571.JPEG', 'car2572.JPEG', 'car2573.JPEG', 'car2574.JPEG', 'car2575.JPEG', 'car2576.JPEG', 'car2577.JPEG', 'car2578.JPEG', 'car2579.JPEG', 'car2580.JPEG', 'car2581.JPEG', 'car2582.JPEG', 'car2583.JPEG', 'car2584.JPEG', 'car2585.JPEG', 'car2586.JPEG', 'car2587.JPEG', 'car2588.JPEG', 'car2589.JPEG', 'car2590.JPEG', 'car2591.JPEG', 'car2592.JPEG', 'car2593.JPEG', 'car2594.JPEG', 'car2595.JPEG', 'car2596.JPEG', 'car2597.JPEG', 'car2598.JPEG', 'car2599.JPEG', 'car2600.JPEG', 'car2601.JPEG', 'car2602.JPEG', 'car2603.JPEG', 'car2604.JPEG', 'car2605.JPEG', 'car2606.JPEG', 'car2607.JPEG', 'car2608.JPEG', 'car2609.JPEG', 'car2610.JPEG', 'car2611.JPEG', 'car2612.JPEG', 'car2613.JPEG', 'car2614.JPEG', 'car2615.JPEG', 'car2616.JPEG', 'car2617.JPEG', 'car2618.JPEG', 'car2619.JPEG', 'car2620.JPEG', 'car2621.JPEG', 'car2622.JPEG', 'car2623.JPEG', 'car2624.JPEG', 'car2625.JPEG', 'car2626.JPEG', 'car2627.JPEG', 'car2628.JPEG', 'car2629.JPEG', 'car2630.JPEG', 'car2631.JPEG', 'car2632.JPEG', 'car2633.JPEG', 'car2634.JPEG', 'car2635.JPEG', 'car2636.JPEG', 'car2637.JPEG', 'car2638.JPEG', 'car2639.JPEG', 'car2640.JPEG', 'car2641.JPEG', 'car2642.JPEG', 'car2643.JPEG', 'car2644.JPEG', 'car2645.JPEG', 'car2646.JPEG', 'car2647.JPEG', 'car2648.JPEG', 'car2649.JPEG', 'car2650.JPEG', 'car2651.JPEG', 'car2652.JPEG', 'car2653.JPEG', 'car2654.JPEG', 'car2655.JPEG', 'car2656.JPEG', 'car2657.JPEG', 'car2658.JPEG', 'car2659.JPEG', 'car2660.JPEG', 'car2661.JPEG', 'car2662.JPEG', 'car2663.JPEG', 'car2664.JPEG', 'car2665.JPEG', 'car2666.JPEG', 'car2667.JPEG', 'car2668.JPEG', 'car2669.JPEG', 'car2670.JPEG', 'car2671.JPEG', 'car2672.JPEG', 'car2673.JPEG', 'car2674.JPEG', 'car2675.JPEG', 'car2676.JPEG', 'car2677.JPEG', 'car2678.JPEG', 'car2679.JPEG', 'car2680.JPEG', 'car2681.JPEG', 'car2682.JPEG', 'car2683.JPEG', 'car2684.JPEG', 'car2685.JPEG', 'car2686.JPEG', 'car2687.JPEG', 'car2688.JPEG', 'car2689.JPEG', 'car2690.JPEG', 'car2691.JPEG', 'car2692.JPEG', 'car2693.JPEG', 'car2694.JPEG', 'car2695.JPEG', 'car2696.JPEG', 'car2697.JPEG', 'car2698.JPEG', 'car2699.JPEG', 'car2700.JPEG', 'car2701.JPEG', 'car2702.JPEG', 'car2703.JPEG', 'car2704.JPEG', 'car2705.JPEG', 'car2706.JPEG', 'car2707.JPEG', 'car2708.JPEG', 'car2709.JPEG', 'car2710.JPEG', 'car2711.JPEG', 'car2712.JPEG', 'car2713.JPEG', 'car2714.JPEG', 'car2715.JPEG', 'car2716.JPEG', 'car2717.JPEG', 'car2718.JPEG', 'car2719.JPEG', 'car2720.JPEG', 'car2721.JPEG', 'car2722.JPEG', 'car2723.JPEG', 'car2724.JPEG', 'car2725.JPEG', 'car2726.JPEG', 'car2727.JPEG', 'car2728.JPEG', 'car2729.JPEG', 'car2730.JPEG', 'car2731.JPEG', 'car2732.JPEG', 'car2733.JPEG', 'car2734.JPEG', 'car2735.JPEG', 'car2736.JPEG', 'car2737.JPEG', 'car2738.JPEG', 'car2739.JPEG', 'car2740.JPEG', 'car2741.JPEG', 'car2742.JPEG', 'car2743.JPEG', 'car2744.JPEG', 'car2745.JPEG', 'car2746.JPEG', 'car2747.JPEG', 'car2748.JPEG', 'car2749.JPEG', 'car2750.JPEG', 'car2751.JPEG', 'car2752.JPEG', 'car2753.JPEG', 'car2754.JPEG', 'car2755.JPEG', 'car2756.JPEG', 'car2757.JPEG', 'car2758.JPEG', 'car2759.JPEG', 'car2760.JPEG', 'car2761.JPEG', 'car2762.JPEG', 'car2763.JPEG', 'car2764.JPEG', 'car2765.JPEG', 'car2766.JPEG', 'car2767.JPEG', 'car2768.JPEG', 'car2769.JPEG', 'car2770.JPEG', 'car2771.JPEG', 'car2772.JPEG', 'car2773.JPEG', 'car2774.JPEG', 'car2775.JPEG', 'car2776.JPEG', 'car2777.JPEG', 'car2778.JPEG', 'car2779.JPEG', 'car2780.JPEG', 'car2781.JPEG', 'car2782.JPEG', 'car2783.JPEG', 'car2784.JPEG', 'car2785.JPEG', 'car2786.JPEG', 'car2787.JPEG', 'car2788.JPEG', 'car2789.JPEG', 'car2790.JPEG', 'car2791.JPEG', 'car2792.JPEG', 'car2793.JPEG', 'car2794.JPEG', 'car2795.JPEG', 'car2796.JPEG', 'car2797.JPEG', 'car2798.JPEG', 'car2799.JPEG', 'car2800.JPEG', 'car2801.JPEG', 'car2802.JPEG', 'car2803.JPEG', 'car2804.JPEG', 'car2805.JPEG', 'car2806.JPEG', 'car2807.JPEG', 'car2808.JPEG', 'car2809.JPEG', 'car2810.JPEG', 'car2811.JPEG', 'car2812.JPEG', 'car2813.JPEG', 'car2814.JPEG', 'car2815.JPEG', 'car2816.JPEG', 'car2817.JPEG', 'car2818.JPEG', 'car2819.JPEG', 'car2820.JPEG', 'car2821.JPEG', 'car2822.JPEG', 'car2823.JPEG', 'car2824.JPEG', 'car2825.JPEG', 'car2826.JPEG', 'car2827.JPEG', 'car2828.JPEG', 'car2829.JPEG', 'car2830.JPEG', 'car2831.JPEG', 'car2832.JPEG', 'car2833.JPEG', 'car2834.JPEG', 'car2835.JPEG', 'car2836.JPEG', 'car2837.JPEG', 'car2838.JPEG', 'car2839.JPEG', 'car2840.JPEG', 'car2841.JPEG', 'car2842.JPEG', 'car2843.JPEG', 'car2844.JPEG', 'car2845.JPEG', 'car2846.JPEG', 'car2847.JPEG', 'car2848.JPEG', 'car2849.JPEG', 'car2850.JPEG', 'car2851.JPEG', 'car2852.JPEG', 'car2853.JPEG', 'car2854.JPEG', 'car2855.JPEG', 'car2856.JPEG', 'car2857.JPEG', 'car2858.JPEG', 'car2859.JPEG', 'car2860.JPEG', 'car2861.JPEG', 'car2862.JPEG', 'car2863.JPEG', 'car2864.JPEG', 'car2865.JPEG', 'car2866.JPEG', 'car2867.JPEG', 'car2868.JPEG', 'car2869.JPEG', 'car2870.JPEG', 'car2871.JPEG', 'car2872.JPEG', 'car2873.JPEG', 'car2874.JPEG', 'car2875.JPEG', 'car2876.JPEG', 'car2877.JPEG', 'car2878.JPEG', 'car2879.JPEG', 'car2880.JPEG', 'car2881.JPEG', 'car2882.JPEG', 'car2883.JPEG', 'car2884.JPEG', 'car2885.JPEG', 'car2886.JPEG', 'car2887.JPEG', 'car2888.JPEG', 'car2889.JPEG', 'car2890.JPEG', 'car2891.JPEG', 'car2892.JPEG', 'car2893.JPEG', 'car2894.JPEG', 'car2895.JPEG', 'car2896.JPEG', 'car2897.JPEG', 'car2898.JPEG', 'car2899.JPEG', 'car2900.JPEG', 'car2901.JPEG', 'car2902.JPEG', 'car2903.JPEG', 'car2904.JPEG', 'car2905.JPEG', 'car2906.JPEG', 'car2907.JPEG', 'car2908.JPEG', 'car2909.JPEG', 'car2910.JPEG', 'car2911.JPEG', 'car2912.JPEG', 'car2913.JPEG', 'car2914.JPEG', 'car2915.JPEG', 'car2916.JPEG', 'car2917.JPEG', 'car2918.JPEG', 'car2919.JPEG', 'car2920.JPEG', 'car2921.JPEG', 'car2922.JPEG', 'car2923.JPEG', 'car2924.JPEG', 'car2925.JPEG', 'car2926.JPEG', 'car2927.JPEG', 'car2928.JPEG', 'car2929.JPEG', 'car2930.JPEG', 'car2931.JPEG', 'car2932.JPEG', 'car2933.JPEG', 'car2934.JPEG', 'car2935.JPEG', 'car2936.JPEG', 'car2937.JPEG', 'car2938.JPEG', 'car2939.JPEG', 'car2940.JPEG', 'car2941.JPEG', 'car2942.JPEG', 'car2943.JPEG', 'car2944.JPEG', 'car2945.JPEG', 'car2946.JPEG', 'car2947.JPEG', 'car2948.JPEG', 'car2949.JPEG', 'car2950.JPEG', 'car2951.JPEG', 'car2952.JPEG', 'car2953.JPEG', 'car2954.JPEG', 'car2955.JPEG', 'car2956.JPEG', 'car2957.JPEG', 'car2958.JPEG', 'car2959.JPEG', 'car2960.JPEG', 'car2961.JPEG', 'car2962.JPEG', 'car2963.JPEG', 'car2964.JPEG', 'car2965.JPEG', 'car2966.JPEG', 'car2967.JPEG', 'car2968.JPEG', 'car2969.JPEG', 'car2970.JPEG', 'car2971.JPEG', 'car2972.JPEG', 'car2973.JPEG', 'car2974.JPEG', 'car2975.JPEG', 'car2976.JPEG', 'car2977.JPEG', 'car2978.JPEG', 'car2979.JPEG', 'car2980.JPEG', 'car2981.JPEG', 'car2982.JPEG', 'car2983.JPEG', 'car2984.JPEG', 'car2985.JPEG', 'car2986.JPEG', 'car2987.JPEG', 'car2988.JPEG', 'car2989.JPEG', 'car2990.JPEG', 'car2991.JPEG', 'car2992.JPEG', 'car2993.JPEG', 'car2994.JPEG', 'car2995.JPEG', 'car2996.JPEG', 'car2997.JPEG', 'car2998.JPEG', 'car2999.JPEG', 'car3000.JPEG', 'car3001.JPEG', 'car3002.JPEG', 'car3003.JPEG', 'car3004.JPEG', 'car3005.JPEG', 'car3006.JPEG', 'car3007.JPEG', 'car3008.JPEG', 'car3009.JPEG', 'car3010.JPEG', 'car3011.JPEG', 'car3012.JPEG', 'car3013.JPEG', 'car3014.JPEG', 'car3015.JPEG', 'car3016.JPEG', 'car3017.JPEG', 'car3018.JPEG', 'car3019.JPEG', 'car3020.JPEG', 'car3021.JPEG', 'car3022.JPEG', 'car3023.JPEG', 'car3024.JPEG', 'car3025.JPEG', 'car3026.JPEG', 'car3027.JPEG', 'car3028.JPEG', 'car3029.JPEG', 'car3030.JPEG', 'car3031.JPEG', 'car3032.JPEG', 'car3033.JPEG', 'car3034.JPEG', 'car3035.JPEG', 'car3036.JPEG', 'car3037.JPEG', 'car3038.JPEG', 'car3039.JPEG', 'car3040.JPEG', 'car3041.JPEG', 'car3042.JPEG', 'car3043.JPEG', 'car3044.JPEG', 'car3045.JPEG', 'car3046.JPEG', 'car3047.JPEG', 'car3048.JPEG', 'car3049.JPEG', 'car3050.JPEG', 'car3051.JPEG', 'car3052.JPEG', 'car3053.JPEG', 'car3054.JPEG', 'car3055.JPEG', 'car3056.JPEG', 'car3057.JPEG', 'car3058.JPEG', 'car3059.JPEG', 'car3060.JPEG', 'car3061.JPEG', 'car3062.JPEG', 'car3063.JPEG', 'car3064.JPEG', 'car3065.JPEG', 'car3066.JPEG', 'car3067.JPEG', 'car3068.JPEG', 'car3069.JPEG', 'car3070.JPEG', 'car3071.JPEG', 'car3072.JPEG', 'car3073.JPEG', 'car3074.JPEG', 'car3075.JPEG', 'car3076.JPEG', 'car3077.JPEG', 'car3078.JPEG', 'car3079.JPEG', 'car3080.JPEG', 'car3081.JPEG', 'car3082.JPEG', 'car3083.JPEG', 'car3084.JPEG', 'car3085.JPEG', 'car3086.JPEG', 'car3087.JPEG', 'car3088.JPEG', 'car3089.JPEG', 'car3090.JPEG', 'car3091.JPEG', 'car3092.JPEG', 'car3093.JPEG', 'car3094.JPEG', 'car3095.JPEG', 'car3096.JPEG', 'car3097.JPEG', 'car3098.JPEG', 'car3099.JPEG', 'car3100.JPEG', 'car3101.JPEG', 'car3102.JPEG', 'car3103.JPEG', 'car3104.JPEG', 'car3105.JPEG', 'car3106.JPEG', 'car3107.JPEG', 'car3108.JPEG', 'car3109.JPEG', 'car3110.JPEG', 'car3111.JPEG', 'car3112.JPEG', 'car3113.JPEG', 'car3114.JPEG', 'car3115.JPEG', 'car3116.JPEG', 'car3117.JPEG', 'car3118.JPEG', 'car3119.JPEG', 'car3120.JPEG', 'car3121.JPEG', 'car3122.JPEG', 'car3123.JPEG', 'car3124.JPEG', 'car3125.JPEG', 'car3126.JPEG', 'car3127.JPEG', 'car3128.JPEG', 'car3129.JPEG', 'car3130.JPEG', 'car3131.JPEG', 'car3132.JPEG', 'car3133.JPEG', 'car3134.JPEG', 'car3135.JPEG', 'car3136.JPEG', 'car3137.JPEG', 'car3138.JPEG', 'car3139.JPEG', 'car3140.JPEG', 'car3141.JPEG', 'car3142.JPEG', 'car3143.JPEG', 'car3144.JPEG', 'car3145.JPEG', 'car3146.JPEG', 'car3147.JPEG', 'car3148.JPEG', 'car3149.JPEG', 'car3150.JPEG', 'car3151.JPEG', 'car3152.JPEG', 'car3153.JPEG', 'car3154.JPEG', 'car3155.JPEG', 'car3156.JPEG', 'car3157.JPEG', 'car3158.JPEG', 'car3159.JPEG', 'car3160.JPEG', 'car3161.JPEG', 'car3162.JPEG', 'car3163.JPEG', 'car3164.JPEG', 'car3165.JPEG', 'car3166.JPEG', 'car3167.JPEG', 'car3168.JPEG', 'car3169.JPEG', 'car3170.JPEG', 'car3171.JPEG', 'car3172.JPEG', 'car3173.JPEG', 'car3174.JPEG', 'car3175.JPEG', 'car3176.JPEG', 'car3177.JPEG', 'car3178.JPEG', 'car3179.JPEG', 'car3180.JPEG', 'car3181.JPEG', 'car3182.JPEG', 'car3183.JPEG', 'car3184.JPEG', 'car3185.JPEG', 'car3186.JPEG', 'car3187.JPEG', 'car3188.JPEG', 'car3189.JPEG', 'car3190.JPEG', 'car3191.JPEG', 'car3192.JPEG', 'car3193.JPEG', 'car3194.JPEG', 'car3195.JPEG', 'car3196.JPEG', 'car3197.JPEG', 'car3198.JPEG', 'car3199.JPEG', 'car3200.JPEG', 'car3201.JPEG', 'car3202.JPEG', 'car3203.JPEG', 'car3204.JPEG', 'car3205.JPEG', 'car3206.JPEG', 'car3207.JPEG', 'car3208.JPEG', 'car3209.JPEG', 'car3210.JPEG', 'car3211.JPEG', 'car3212.JPEG', 'car3213.JPEG', 'car3214.JPEG', 'car3215.JPEG', 'car3216.JPEG', 'car3217.JPEG', 'car3218.JPEG', 'car3219.JPEG', 'car3220.JPEG', 'car3221.JPEG', 'car3222.JPEG', 'car3223.JPEG', 'car3224.JPEG', 'car3225.JPEG', 'car3226.JPEG', 'car3227.JPEG', 'car3228.JPEG', 'car3229.JPEG', 'car3230.JPEG', 'car3231.JPEG', 'car3232.JPEG', 'car3233.JPEG', 'car3234.JPEG', 'car3235.JPEG', 'car3236.JPEG', 'car3237.JPEG', 'car3238.JPEG', 'car3239.JPEG', 'car3240.JPEG', 'car3241.JPEG', 'car3242.JPEG', 'car3243.JPEG', 'car3244.JPEG', 'car3245.JPEG', 'car3246.JPEG', 'car3247.JPEG', 'car3248.JPEG', 'car3249.JPEG', 'car3250.JPEG', 'car3251.JPEG', 'car3252.JPEG', 'car3253.JPEG', 'car3254.JPEG', 'car3255.JPEG', 'car3256.JPEG', 'car3257.JPEG', 'car3258.JPEG', 'car3259.JPEG', 'car3260.JPEG', 'car3261.JPEG', 'car3262.JPEG', 'car3263.JPEG', 'car3264.JPEG', 'car3265.JPEG', 'car3266.JPEG', 'car3267.JPEG', 'car3268.JPEG', 'car3269.JPEG', 'car3270.JPEG', 'car3271.JPEG', 'car3272.JPEG', 'car3273.JPEG', 'car3274.JPEG', 'car3275.JPEG', 'car3276.JPEG', 'car3277.JPEG', 'car3278.JPEG', 'car3279.JPEG', 'car3280.JPEG', 'car3281.JPEG', 'car3282.JPEG', 'car3283.JPEG', 'car3284.JPEG', 'car3285.JPEG', 'car3286.JPEG', 'car3287.JPEG', 'car3288.JPEG', 'car3289.JPEG', 'car3290.JPEG', 'car3291.JPEG', 'car3292.JPEG', 'car3293.JPEG', 'car3294.JPEG', 'car3295.JPEG', 'car3296.JPEG', 'car3297.JPEG', 'car3298.JPEG', 'car3299.JPEG', 'car3300.JPEG', 'car3301.JPEG', 'car3302.JPEG', 'car3303.JPEG', 'car3304.JPEG', 'car3305.JPEG', 'car3306.JPEG', 'car3307.JPEG', 'car3308.JPEG', 'car3309.JPEG', 'car3310.JPEG', 'car3311.JPEG', 'car3312.JPEG', 'car3313.JPEG', 'car3314.JPEG', 'car3315.JPEG', 'car3316.JPEG', 'car3317.JPEG', 'car3318.JPEG', 'car3319.JPEG', 'car3320.JPEG', 'car3321.JPEG', 'car3322.JPEG', 'car3323.JPEG', 'car3324.JPEG', 'car3325.JPEG', 'car3326.JPEG', 'car3327.JPEG', 'car3328.JPEG', 'car3329.JPEG', 'car3330.JPEG', 'car3331.JPEG', 'car3332.JPEG', 'car3333.JPEG', 'car3334.JPEG', 'car3335.JPEG', 'car3336.JPEG', 'car3337.JPEG', 'car3338.JPEG', 'car3339.JPEG', 'car3340.JPEG', 'car3341.JPEG', 'car3342.JPEG', 'car3343.JPEG', 'car3344.JPEG', 'car3345.JPEG', 'car3346.JPEG', 'car3347.JPEG', 'car3348.JPEG', 'car3349.JPEG', 'car3350.JPEG', 'car3351.JPEG', 'car3352.JPEG', 'car3353.JPEG', 'car3354.JPEG', 'car3355.JPEG', 'car3356.JPEG', 'car3357.JPEG', 'car3358.JPEG', 'car3359.JPEG', 'car3360.JPEG', 'car3361.JPEG', 'car3362.JPEG', 'car3363.JPEG', 'car3364.JPEG', 'car3365.JPEG', 'car3366.JPEG', 'car3367.JPEG', 'car3368.JPEG', 'car3369.JPEG', 'car3370.JPEG', 'car3371.JPEG', 'car3372.JPEG', 'car3373.JPEG', 'car3374.JPEG', 'car3375.JPEG', 'car3376.JPEG', 'car3377.JPEG', 'car3378.JPEG', 'car3379.JPEG', 'car3380.JPEG', 'car3381.JPEG', 'car3382.JPEG', 'car3383.JPEG', 'car3384.JPEG', 'car3385.JPEG', 'car3386.JPEG', 'car3387.JPEG', 'car3388.JPEG', 'car3389.JPEG', 'car3390.JPEG', 'car3391.JPEG', 'car3392.JPEG', 'car3393.JPEG', 'car3394.JPEG', 'car3395.JPEG', 'car3396.JPEG', 'car3397.JPEG', 'car3398.JPEG', 'car3399.JPEG', 'car3400.JPEG', 'car3401.JPEG', 'car3402.JPEG', 'car3403.JPEG', 'car3404.JPEG', 'car3405.JPEG', 'car3406.JPEG', 'car3407.JPEG', 'car3408.JPEG', 'car3409.JPEG', 'car3410.JPEG', 'car3411.JPEG', 'car3412.JPEG', 'car3413.JPEG', 'car3414.JPEG', 'car3415.JPEG', 'car3416.JPEG', 'car3417.JPEG', 'car3418.JPEG', 'car3419.JPEG', 'car3420.JPEG', 'car3421.JPEG', 'car3422.JPEG', 'car3423.JPEG', 'car3424.JPEG', 'car3425.JPEG', 'car3426.JPEG', 'car3427.JPEG', 'car3428.JPEG', 'car3429.JPEG', 'car3430.JPEG', 'car3431.JPEG', 'car3432.JPEG', 'car3433.JPEG', 'car3434.JPEG', 'car3435.JPEG', 'car3436.JPEG', 'car3437.JPEG', 'car3438.JPEG', 'car3439.JPEG', 'car3440.JPEG', 'car3441.JPEG', 'car3442.JPEG', 'car3443.JPEG', 'car3444.JPEG', 'car3445.JPEG', 'car3446.JPEG', 'car3447.JPEG', 'car3448.JPEG', 'car3449.JPEG', 'car3450.JPEG', 'car3451.JPEG', 'car3452.JPEG', 'car3453.JPEG', 'car3454.JPEG', 'car3455.JPEG', 'car3456.JPEG', 'car3457.JPEG', 'car3458.JPEG', 'car3459.JPEG', 'car3460.JPEG', 'car3461.JPEG', 'car3462.JPEG', 'car3463.JPEG', 'car3464.JPEG', 'car3465.JPEG', 'car3466.JPEG', 'car3467.JPEG', 'car3468.JPEG', 'car3469.JPEG', 'car3470.JPEG', 'car3471.JPEG', 'car3472.JPEG', 'car3473.JPEG', 'car3474.JPEG', 'car3475.JPEG', 'car3476.JPEG', 'car3477.JPEG', 'car3478.JPEG', 'car3479.JPEG', 'car3480.JPEG', 'car3481.JPEG', 'car3482.JPEG', 'car3483.JPEG', 'car3484.JPEG', 'car3485.JPEG', 'car3486.JPEG', 'car3487.JPEG', 'car3488.JPEG', 'car3489.JPEG', 'car3490.JPEG', 'car3491.JPEG', 'car3492.JPEG', 'car3493.JPEG', 'car3494.JPEG', 'car3495.JPEG', 'car3496.JPEG', 'car3497.JPEG', 'car3498.JPEG', 'car3499.JPEG', 'car3500.JPEG', 'car3501.JPEG', 'car3502.JPEG', 'car3503.JPEG', 'car3504.JPEG', 'car3505.JPEG', 'car3506.JPEG', 'car3507.JPEG', 'car3508.JPEG', 'car3509.JPEG', 'car3510.JPEG', 'car3511.JPEG', 'car3512.JPEG', 'car3513.JPEG', 'car3514.JPEG', 'car3515.JPEG', 'car3516.JPEG', 'car3517.JPEG', 'car3518.JPEG', 'car3519.JPEG', 'car3520.JPEG', 'car3521.JPEG', 'car3522.JPEG', 'car3523.JPEG', 'car3524.JPEG', 'car3525.JPEG', 'car3526.JPEG', 'car3527.JPEG', 'car3528.JPEG', 'car3529.JPEG', 'car3530.JPEG', 'car3531.JPEG', 'car3532.JPEG', 'car1533.JPEG', 'car1534.JPEG', 'car1535.JPEG', 'car1536.JPEG', 'car1537.JPEG', 'car1538.JPEG', 'car1539.JPEG', 'car1540.JPEG', 'car1541.JPEG', 'car1542.JPEG', 'car1543.JPEG', 'car1544.JPEG', 'car1545.JPEG', 'car1546.JPEG', 'car1547.JPEG', 'car1548.JPEG', 'car1549.JPEG', 'car1550.JPEG', 'car1551.JPEG', 'car1552.JPEG', 'car1553.JPEG', 'car1554.JPEG', 'car1555.JPEG', 'car1556.JPEG', 'car1557.JPEG', 'car1558.JPEG', 'car1559.JPEG', 'car1560.JPEG', 'car1561.JPEG', 'car1562.JPEG', 'car1563.JPEG', 'car1564.JPEG', 'car1565.JPEG', 'car1566.JPEG', 'car1567.JPEG', 'car1568.JPEG', 'car1569.JPEG', 'car1570.JPEG', 'car1571.JPEG', 'car1572.JPEG', 'car1573.JPEG', 'car1574.JPEG', 'car1575.JPEG', 'car1576.JPEG', 'car1577.JPEG', 'car1578.JPEG', 'car1579.JPEG', 'car1580.JPEG', 'car1581.JPEG', 'car1582.JPEG', 'car1583.JPEG', 'car1584.JPEG', 'car1585.JPEG', 'car1586.JPEG', 'car1587.JPEG', 'car1588.JPEG', 'car1589.JPEG', 'car1590.JPEG', 'car1591.JPEG', 'car1592.JPEG', 'car1593.JPEG', 'car1594.JPEG', 'car1595.JPEG', 'car1596.JPEG', 'car1597.JPEG', 'car1598.JPEG', 'car1599.JPEG', 'car1600.JPEG', 'car1601.JPEG', 'car1602.JPEG', 'car1603.JPEG', 'car1604.JPEG', 'car1605.JPEG', 'car1606.JPEG', 'car1607.JPEG', 'car1608.JPEG', 'car1609.JPEG', 'car1610.JPEG', 'car1611.JPEG', 'car1612.JPEG', 'car1613.JPEG', 'car1614.JPEG', 'car1615.JPEG', 'car1616.JPEG', 'car1617.JPEG', 'car1618.JPEG', 'car1619.JPEG', 'car1620.JPEG', 'car1621.JPEG', 'car1622.JPEG', 'car1623.JPEG', 'car1624.JPEG', 'car1625.JPEG', 'car1626.JPEG', 'car1627.JPEG', 'car1628.JPEG', 'car1629.JPEG', 'car1630.JPEG', 'car1631.JPEG', 'car1632.JPEG', 'car1633.JPEG', 'car1634.JPEG', 'car1635.JPEG', 'car1636.JPEG', 'car1637.JPEG', 'car1638.JPEG', 'car1639.JPEG', 'car1640.JPEG', 'car1641.JPEG', 'car1642.JPEG', 'car1643.JPEG', 'car1644.JPEG', 'car1645.JPEG', 'car1646.JPEG', 'car1647.JPEG', 'car1648.JPEG', 'car1649.JPEG', 'car1650.JPEG', 'car1651.JPEG', 'car1652.JPEG', 'car1653.JPEG', 'car1654.JPEG', 'car1655.JPEG', 'car1656.JPEG', 'car1657.JPEG', 'car1658.JPEG', 'car1659.JPEG', 'car1660.JPEG', 'car1661.JPEG', 'car1662.JPEG', 'car1663.JPEG', 'car1664.JPEG', 'car1665.JPEG', 'car1666.JPEG', 'car1667.JPEG', 'car1668.JPEG', 'car1669.JPEG', 'car1670.JPEG', 'car1671.JPEG', 'car1672.JPEG', 'car1673.JPEG', 'car1674.JPEG', 'car1675.JPEG', 'car1676.JPEG', 'car1677.JPEG', 'car1678.JPEG', 'car1679.JPEG', 'car1680.JPEG', 'car1681.JPEG', 'car1682.JPEG', 'car1683.JPEG', 'car1684.JPEG', 'car1685.JPEG', 'car1686.JPEG', 'car1687.JPEG', 'car1688.JPEG', 'car1689.JPEG', 'car1690.JPEG', 'car1691.JPEG', 'car1692.JPEG', 'car1693.JPEG', 'car1694.JPEG', 'car1695.JPEG', 'car1696.JPEG', 'car1697.JPEG', 'car1698.JPEG', 'car1699.JPEG', 'car1700.JPEG', 'car1701.JPEG', 'car1702.JPEG', 'car1703.JPEG', 'car1704.JPEG', 'car1705.JPEG', 'car1706.JPEG', 'car1707.JPEG', 'car1708.JPEG', 'car1709.JPEG', 'car1710.JPEG', 'car1711.JPEG', 'car1712.JPEG', 'car1713.JPEG', 'car1714.JPEG', 'car1715.JPEG', 'car1716.JPEG', 'car1717.JPEG', 'car1718.JPEG', 'car1719.JPEG', 'car1720.JPEG', 'car1721.JPEG', 'car1722.JPEG', 'car1723.JPEG', 'car1724.JPEG', 'car1725.JPEG', 'car1726.JPEG', 'car1727.JPEG', 'car1728.JPEG', 'car1729.JPEG', 'car1730.JPEG', 'car1731.JPEG', 'car1732.JPEG', 'car1733.JPEG', 'car1734.JPEG', 'car1735.JPEG', 'car1736.JPEG', 'car1737.JPEG', 'car1738.JPEG', 'car1739.JPEG', 'car1740.JPEG', 'car1741.JPEG', 'car1742.JPEG', 'car1743.JPEG', 'car1744.JPEG', 'car1745.JPEG', 'car1746.JPEG', 'car1747.JPEG', 'car1748.JPEG', 'car1749.JPEG', 'car1750.JPEG', 'car1751.JPEG', 'car1752.JPEG', 'car1753.JPEG', 'car1754.JPEG', 'car1755.JPEG', 'car1756.JPEG', 'car1757.JPEG', 'car1758.JPEG', 'car1759.JPEG', 'car1760.JPEG', 'car1761.JPEG', 'car1762.JPEG', 'car1763.JPEG', 'car1764.JPEG', 'car1765.JPEG', 'car1766.JPEG', 'car1767.JPEG', 'car1768.JPEG', 'car1769.JPEG', 'car1770.JPEG', 'car1771.JPEG', 'car1772.JPEG', 'car1773.JPEG', 'car1774.JPEG', 'car1775.JPEG', 'car1776.JPEG', 'car1777.JPEG', 'car1778.JPEG', 'car1779.JPEG', 'car1780.JPEG', 'car1781.JPEG', 'car1782.JPEG', 'car1783.JPEG', 'car1784.JPEG', 'car1785.JPEG', 'car1786.JPEG', 'car1787.JPEG', 'car1788.JPEG', 'car1789.JPEG', 'car1790.JPEG', 'car1791.JPEG', 'car1792.JPEG', 'car1793.JPEG', 'car1794.JPEG', 'car1795.JPEG', 'car1796.JPEG', 'car1797.JPEG', 'car1798.JPEG', 'car1799.JPEG', 'car1800.JPEG', 'car1801.JPEG', 'car1802.JPEG', 'car1803.JPEG', 'car1804.JPEG', 'car1805.JPEG', 'car1806.JPEG', 'car1807.JPEG', 'car1808.JPEG', 'car1809.JPEG', 'car1810.JPEG', 'car1811.JPEG', 'car1812.JPEG', 'car1813.JPEG', 'car1814.JPEG', 'car1815.JPEG', 'car1816.JPEG', 'car1817.JPEG', 'car1818.JPEG', 'car1819.JPEG', 'car1820.JPEG', 'car1821.JPEG', 'car1822.JPEG', 'car1823.JPEG', 'car1824.JPEG', 'car1825.JPEG', 'car1826.JPEG', 'car1827.JPEG', 'car1828.JPEG', 'car1829.JPEG', 'car1830.JPEG', 'car1831.JPEG', 'car1832.JPEG', 'car1833.JPEG', 'car1834.JPEG', 'car1835.JPEG', 'car1836.JPEG', 'car1837.JPEG', 'car1838.JPEG', 'car1839.JPEG', 'car1840.JPEG', 'car1841.JPEG', 'car1842.JPEG', 'car1843.JPEG', 'car1844.JPEG', 'car1845.JPEG', 'car1846.JPEG', 'car1847.JPEG', 'car1848.JPEG', 'car1849.JPEG', 'car1850.JPEG', 'car1851.JPEG', 'car1852.JPEG', 'car1853.JPEG', 'car1854.JPEG', 'car1855.JPEG', 'car1856.JPEG', 'car1857.JPEG', 'car1858.JPEG', 'car1859.JPEG', 'car1860.JPEG', 'car1861.JPEG', 'car1862.JPEG', 'car1863.JPEG', 'car1864.JPEG', 'car1865.JPEG', 'car1866.JPEG', 'car1867.JPEG', 'car1868.JPEG', 'car1869.JPEG', 'car1870.JPEG', 'car1871.JPEG', 'car1872.JPEG', 'car1873.JPEG', 'car1874.JPEG', 'car1875.JPEG', 'car1876.JPEG', 'car1877.JPEG', 'car1878.JPEG', 'car1879.JPEG', 'car1880.JPEG', 'car1881.JPEG', 'car1882.JPEG', 'car1883.JPEG', 'car1884.JPEG', 'car1885.JPEG', 'car1886.JPEG', 'car1887.JPEG', 'car1888.JPEG', 'car1889.JPEG', 'car1890.JPEG', 'car1891.JPEG', 'car1892.JPEG', 'car1893.JPEG', 'car1894.JPEG', 'car1895.JPEG', 'car1896.JPEG', 'car1897.JPEG', 'car1898.JPEG', 'car1899.JPEG', 'car1900.JPEG', 'car1901.JPEG', 'car1902.JPEG', 'car1903.JPEG', 'car1904.JPEG', 'car1905.JPEG', 'car1906.JPEG', 'car1907.JPEG', 'car1908.JPEG', 'car1909.JPEG', 'car1910.JPEG', 'car1911.JPEG', 'car1912.JPEG', 'car1913.JPEG', 'car1914.JPEG', 'car1915.JPEG', 'car1916.JPEG', 'car1917.JPEG', 'car1918.JPEG', 'car1919.JPEG', 'car1920.JPEG', 'car1921.JPEG', 'car1922.JPEG', 'car1923.JPEG', 'car1924.JPEG', 'car1925.JPEG', 'car1926.JPEG', 'car1927.JPEG', 'car1928.JPEG', 'car1929.JPEG', 'car1930.JPEG', 'car1931.JPEG', 'car1932.JPEG', 'car1933.JPEG', 'car1934.JPEG', 'car1935.JPEG', 'car1936.JPEG', 'car1937.JPEG', 'car1938.JPEG', 'car1939.JPEG', 'car1940.JPEG', 'car1941.JPEG', 'car1942.JPEG', 'car1943.JPEG', 'car1944.JPEG', 'car1945.JPEG', 'car1946.JPEG', 'car1947.JPEG', 'car1948.JPEG', 'car1949.JPEG', 'car1950.JPEG', 'car1951.JPEG', 'car1952.JPEG', 'car1953.JPEG', 'car1954.JPEG', 'car1955.JPEG', 'car1956.JPEG', 'car1957.JPEG', 'car1958.JPEG', 'car1959.JPEG', 'car1960.JPEG', 'car1961.JPEG', 'car1962.JPEG', 'car1963.JPEG', 'car1964.JPEG', 'car1965.JPEG', 'car1966.JPEG', 'car1967.JPEG', 'car1968.JPEG', 'car1969.JPEG', 'car1970.JPEG', 'car1971.JPEG', 'car1972.JPEG', 'car1973.JPEG', 'car1974.JPEG', 'car1975.JPEG', 'car1976.JPEG', 'car1977.JPEG', 'car1978.JPEG', 'car1979.JPEG', 'car1980.JPEG', 'car1981.JPEG', 'car1982.JPEG', 'car1983.JPEG', 'car1984.JPEG', 'car1985.JPEG', 'car1986.JPEG', 'car1987.JPEG', 'car1988.JPEG', 'car1989.JPEG', 'car1990.JPEG', 'car1991.JPEG', 'car1992.JPEG', 'car1993.JPEG', 'car1994.JPEG', 'car1995.JPEG', 'car1996.JPEG', 'car1997.JPEG', 'car1998.JPEG', 'car1999.JPEG', 'car2000.JPEG', 'car2001.JPEG', 'car2002.JPEG', 'car2003.JPEG', 'car2004.JPEG', 'car2005.JPEG', 'car2006.JPEG', 'car2007.JPEG', 'car2008.JPEG', 'car2009.JPEG', 'car2010.JPEG', 'car2011.JPEG', 'car2012.JPEG', 'car2013.JPEG', 'car2014.JPEG', 'car2015.JPEG', 'car2016.JPEG', 'car2017.JPEG', 'car2018.JPEG', 'car2019.JPEG', 'car2020.JPEG', 'car2021.JPEG', 'car2022.JPEG', 'car2023.JPEG', 'car2024.JPEG', 'car2025.JPEG', 'car2026.JPEG', 'car2027.JPEG', 'car2028.JPEG', 'car2029.JPEG', 'car2030.JPEG', 'car2031.JPEG', 'car2032.JPEG', 'car2033.JPEG', 'car2034.JPEG', 'car2035.JPEG', 'car2036.JPEG', 'car2037.JPEG', 'car2038.JPEG', 'car2039.JPEG', 'car2040.JPEG', 'car2041.JPEG', 'car2042.JPEG', 'car2043.JPEG', 'car2044.JPEG', 'car2045.JPEG', 'car2046.JPEG', 'car2047.JPEG', 'car2048.JPEG', 'car2049.JPEG', 'car2050.JPEG', 'car2051.JPEG', 'car2052.JPEG', 'car2053.JPEG', 'car2054.JPEG', 'car2055.JPEG', 'car2056.JPEG', 'car2057.JPEG', 'car2058.JPEG', 'car2059.JPEG', 'car2060.JPEG', 'car2061.JPEG', 'car2062.JPEG', 'car2063.JPEG', 'car2064.JPEG', 'car2065.JPEG', 'car2066.JPEG', 'car2067.JPEG', 'car2068.JPEG', 'car2069.JPEG', 'car2070.JPEG', 'car2071.JPEG', 'car2072.JPEG', 'car2073.JPEG', 'car2074.JPEG', 'car2075.JPEG', 'car2076.JPEG', 'car2077.JPEG', 'car2078.JPEG', 'car2079.JPEG', 'car2080.JPEG', 'car2081.JPEG', 'car2082.JPEG', 'car2083.JPEG', 'car2084.JPEG', 'car2085.JPEG', 'car2086.JPEG', 'car2087.JPEG', 'car2088.JPEG', 'car2089.JPEG', 'car2090.JPEG', 'car2091.JPEG', 'car2092.JPEG', 'car2093.JPEG', 'car2094.JPEG', 'car2095.JPEG', 'car2096.JPEG', 'car2097.JPEG', 'car2098.JPEG', 'car2099.JPEG', 'car2100.JPEG', 'car2101.JPEG', 'car2102.JPEG', 'car2103.JPEG', 'car2104.JPEG', 'car2105.JPEG', 'car2106.JPEG', 'car2107.JPEG', 'car2108.JPEG', 'car2109.JPEG', 'car2110.JPEG', 'car2111.JPEG', 'car2112.JPEG', 'car2113.JPEG', 'car2114.JPEG', 'car2115.JPEG', 'car2116.JPEG', 'car2117.JPEG', 'car2118.JPEG', 'car2119.JPEG', 'car2120.JPEG', 'car2121.JPEG', 'car2122.JPEG', 'car2123.JPEG', 'car2124.JPEG', 'car2125.JPEG', 'car2126.JPEG', 'car2127.JPEG', 'car2128.JPEG', 'car2129.JPEG', 'car2130.JPEG', 'car2131.JPEG', 'car2132.JPEG', 'car2133.JPEG', 'car2134.JPEG', 'car2135.JPEG', 'car2136.JPEG', 'car2137.JPEG', 'car2138.JPEG', 'car2139.JPEG', 'car2140.JPEG', 'car2141.JPEG', 'car2142.JPEG', 'car2143.JPEG', 'car2144.JPEG', 'car2145.JPEG', 'car2146.JPEG', 'car2147.JPEG', 'car2148.JPEG', 'car2149.JPEG', 'car2150.JPEG', 'car2151.JPEG', 'car2152.JPEG', 'car2153.JPEG', 'car2154.JPEG', 'car2155.JPEG', 'car2156.JPEG', 'car2157.JPEG', 'car2158.JPEG', 'car2159.JPEG', 'car2160.JPEG', 'car2161.JPEG', 'car2162.JPEG', 'car2163.JPEG', 'car2164.JPEG', 'car2165.JPEG', 'car2166.JPEG', 'car2167.JPEG', 'car2168.JPEG', 'car2169.JPEG', 'car2170.JPEG', 'car2171.JPEG', 'car2172.JPEG', 'car2173.JPEG', 'car2174.JPEG', 'car2175.JPEG', 'car2176.JPEG', 'car2177.JPEG', 'car2178.JPEG', 'car2179.JPEG', 'car2180.JPEG', 'car2181.JPEG', 'car2182.JPEG', 'car2183.JPEG', 'car2184.JPEG', 'car2185.JPEG', 'car2186.JPEG', 'car2187.JPEG', 'car2188.JPEG', 'car2189.JPEG', 'car2190.JPEG', 'car2191.JPEG', 'car2192.JPEG', 'car2193.JPEG', 'car2194.JPEG', 'car2195.JPEG', 'car2196.JPEG', 'car2197.JPEG', 'car2198.JPEG', 'car2199.JPEG', 'car2200.JPEG', 'car2201.JPEG', 'car2202.JPEG', 'car2203.JPEG', 'car2204.JPEG', 'car2205.JPEG', 'car2206.JPEG', 'car2207.JPEG', 'car2208.JPEG', 'car2209.JPEG', 'car2210.JPEG', 'car2211.JPEG', 'car2212.JPEG', 'car2213.JPEG', 'car2214.JPEG', 'car2215.JPEG', 'car2216.JPEG', 'car2217.JPEG', 'car2218.JPEG', 'car2219.JPEG', 'car2220.JPEG', 'car2221.JPEG', 'car2222.JPEG', 'car2223.JPEG', 'car2224.JPEG', 'car2225.JPEG', 'car2226.JPEG', 'car2227.JPEG', 'car2228.JPEG', 'car2229.JPEG', 'car2230.JPEG', 'car2231.JPEG', 'car2232.JPEG', 'car2233.JPEG', 'car2234.JPEG', 'car2235.JPEG', 'car2236.JPEG', 'car2237.JPEG', 'car2238.JPEG', 'car2239.JPEG', 'car2240.JPEG', 'car2241.JPEG', 'car2242.JPEG', 'car2243.JPEG', 'car2244.JPEG', 'car2245.JPEG', 'car2246.JPEG', 'car2247.JPEG', 'car2248.JPEG', 'car2249.JPEG', 'car2250.JPEG', 'car2251.JPEG', 'car2252.JPEG', 'car2253.JPEG', 'car2254.JPEG', 'car2255.JPEG', 'car2256.JPEG', 'car2257.JPEG', 'car2258.JPEG', 'car2259.JPEG', 'car2260.JPEG', 'car2261.JPEG', 'car2262.JPEG', 'car2263.JPEG', 'car2264.JPEG', 'car2265.JPEG', 'car2266.JPEG', 'car2267.JPEG', 'car2268.JPEG', 'car2269.JPEG', 'car2270.JPEG', 'car2271.JPEG', 'car2272.JPEG', 'car2273.JPEG', 'car2274.JPEG', 'car2275.JPEG', 'car2276.JPEG', 'car2277.JPEG', 'car2278.JPEG', 'car2279.JPEG', 'car2280.JPEG', 'car2281.JPEG', 'car2282.JPEG', 'car2283.JPEG', 'car2284.JPEG', 'car2285.JPEG', 'car2286.JPEG', 'car2287.JPEG', 'car2288.JPEG', 'car2289.JPEG', 'car2290.JPEG', 'car2291.JPEG', 'car2292.JPEG', 'car2293.JPEG', 'car2294.JPEG', 'car2295.JPEG', 'car2296.JPEG', 'car2297.JPEG', 'car2298.JPEG', 'car2299.JPEG', 'car2300.JPEG', 'car2301.JPEG', 'car2302.JPEG', 'car2303.JPEG', 'car2304.JPEG', 'car2305.JPEG', 'car2306.JPEG', 'car2307.JPEG', 'car2308.JPEG', 'car2309.JPEG', 'car2310.JPEG', 'car2311.JPEG', 'car2312.JPEG', 'car2313.JPEG', 'car2314.JPEG', 'car2315.JPEG', 'car2316.JPEG', 'car2317.JPEG', 'car2318.JPEG', 'car2319.JPEG', 'car2320.JPEG', 'car2321.JPEG', 'car2322.JPEG', 'car2323.JPEG', 'car2324.JPEG', 'car2325.JPEG', 'car2326.JPEG', 'car2327.JPEG', 'car2328.JPEG', 'car2329.JPEG', 'car2330.JPEG', 'car2331.JPEG', 'car2332.JPEG', 'car2333.JPEG', 'car2334.JPEG', 'car2335.JPEG', 'car2336.JPEG', 'car2337.JPEG', 'car2338.JPEG', 'car2339.JPEG', 'car2340.JPEG', 'car2341.JPEG', 'car2342.JPEG', 'car2343.JPEG', 'car2344.JPEG', 'car2345.JPEG', 'car2346.JPEG', 'car2347.JPEG', 'car2348.JPEG', 'car2349.JPEG', 'car2350.JPEG', 'car2351.JPEG', 'car2352.JPEG', 'car2353.JPEG', 'car2354.JPEG', 'car2355.JPEG', 'car2356.JPEG', 'car2357.JPEG', 'car2358.JPEG', 'car2359.JPEG', 'car2360.JPEG', 'car2361.JPEG', 'car2362.JPEG', 'car2363.JPEG', 'car2364.JPEG', 'car2365.JPEG', 'car2366.JPEG', 'car2367.JPEG', 'car2368.JPEG', 'car2369.JPEG', 'car2370.JPEG', 'car2371.JPEG', 'car2372.JPEG', 'car2373.JPEG', 'car2374.JPEG', 'car2375.JPEG', 'car2376.JPEG', 'car2377.JPEG', 'car2378.JPEG', 'car2379.JPEG', 'car2380.JPEG', 'car2381.JPEG', 'car2382.JPEG', 'car2383.JPEG', 'car2384.JPEG', 'car2385.JPEG', 'car2386.JPEG', 'car2387.JPEG', 'car2388.JPEG', 'car2389.JPEG', 'car2390.JPEG', 'car2391.JPEG', 'car2392.JPEG', 'car2393.JPEG', 'car2394.JPEG', 'car2395.JPEG', 'car2396.JPEG', 'car2397.JPEG', 'car2398.JPEG', 'car2399.JPEG', 'car2400.JPEG', 'car2401.JPEG', 'car2402.JPEG', 'car2403.JPEG', 'car2404.JPEG', 'car2405.JPEG', 'car2406.JPEG', 'car2407.JPEG', 'car2408.JPEG', 'car2409.JPEG', 'car2410.JPEG', 'car2411.JPEG', 'car2412.JPEG', 'car2413.JPEG', 'car2414.JPEG', 'car2415.JPEG', 'car2416.JPEG', 'car2417.JPEG', 'car2418.JPEG', 'car2419.JPEG', 'car2420.JPEG', 'car2421.JPEG', 'car2422.JPEG', 'car2423.JPEG', 'car2424.JPEG', 'car2425.JPEG', 'car2426.JPEG', 'car2427.JPEG', 'car2428.JPEG', 'car2429.JPEG', 'car2430.JPEG', 'car2431.JPEG', 'car2432.JPEG', 'car2433.JPEG', 'car2434.JPEG', 'car2435.JPEG', 'car2436.JPEG', 'car2437.JPEG', 'car2438.JPEG', 'car2439.JPEG', 'car2440.JPEG', 'car2441.JPEG', 'car2442.JPEG', 'car2443.JPEG', 'car2444.JPEG', 'car2445.JPEG', 'car2446.JPEG', 'car2447.JPEG', 'car2448.JPEG', 'car2449.JPEG', 'car2450.JPEG', 'car2451.JPEG', 'car2452.JPEG', 'car2453.JPEG', 'car2454.JPEG', 'car2455.JPEG', 'car2456.JPEG', 'car2457.JPEG', 'car2458.JPEG', 'car2459.JPEG', 'car2460.JPEG', 'car2461.JPEG', 'car2462.JPEG', 'car2463.JPEG', 'car2464.JPEG', 'car2465.JPEG', 'car2466.JPEG', 'car2467.JPEG', 'car2468.JPEG', 'car2469.JPEG', 'car2470.JPEG', 'car2471.JPEG', 'car2472.JPEG', 'car2473.JPEG', 'car2474.JPEG', 'car2475.JPEG', 'car2476.JPEG', 'car2477.JPEG', 'car2478.JPEG', 'car2479.JPEG', 'car2480.JPEG', 'car2481.JPEG', 'car2482.JPEG', 'car2483.JPEG', 'car2484.JPEG', 'car2485.JPEG', 'car2486.JPEG', 'car2487.JPEG', 'car2488.JPEG', 'car2489.JPEG', 'car2490.JPEG', 'car2491.JPEG', 'car2492.JPEG', 'car2493.JPEG', 'car2494.JPEG', 'car2495.JPEG', 'car2496.JPEG', 'car2497.JPEG', 'car2498.JPEG', 'car2499.JPEG', 'car2500.JPEG', 'car2501.JPEG', 'car2502.JPEG', 'car2503.JPEG', 'car2504.JPEG', 'car2505.JPEG', 'car2506.JPEG', 'car2507.JPEG', 'car2508.JPEG', 'car2509.JPEG', 'car2510.JPEG', 'car2511.JPEG', 'car2512.JPEG', 'car2513.JPEG', 'car2514.JPEG', 'car2515.JPEG', 'car2516.JPEG', 'car2517.JPEG', 'car2518.JPEG', 'car2519.JPEG', 'car2520.JPEG', 'car2521.JPEG', 'car2522.JPEG', 'car2523.JPEG', 'car2524.JPEG', 'car2525.JPEG', 'car2526.JPEG', 'car2527.JPEG', 'car2528.JPEG', 'car2529.JPEG', 'car2530.JPEG', 'car2531.JPEG', 'car2532.JPEG', 'car533.JPEG', 'car534.JPEG', 'car535.JPEG', 'car536.JPEG', 'car537.JPEG', 'car538.JPEG', 'car539.JPEG', 'car540.JPEG', 'car541.JPEG', 'car542.JPEG', 'car543.JPEG', 'car544.JPEG', 'car545.JPEG', 'car546.JPEG', 'car547.JPEG', 'car548.JPEG', 'car549.JPEG', 'car550.JPEG', 'car551.JPEG', 'car552.JPEG', 'car553.JPEG', 'car554.JPEG', 'car555.JPEG', 'car556.JPEG', 'car557.JPEG', 'car558.JPEG', 'car559.JPEG', 'car560.JPEG', 'car561.JPEG', 'car562.JPEG', 'car563.JPEG', 'car564.JPEG', 'car565.JPEG', 'car566.JPEG', 'car567.JPEG', 'car568.JPEG', 'car569.JPEG', 'car570.JPEG', 'car571.JPEG', 'car572.JPEG', 'car573.JPEG', 'car574.JPEG', 'car575.JPEG', 'car576.JPEG', 'car577.JPEG', 'car578.JPEG', 'car579.JPEG', 'car580.JPEG', 'car581.JPEG', 'car582.JPEG', 'car583.JPEG', 'car584.JPEG', 'car585.JPEG', 'car586.JPEG', 'car587.JPEG', 'car588.JPEG', 'car589.JPEG', 'car590.JPEG', 'car591.JPEG', 'car592.JPEG', 'car593.JPEG', 'car594.JPEG', 'car595.JPEG', 'car596.JPEG', 'car597.JPEG', 'car598.JPEG', 'car599.JPEG', 'car600.JPEG', 'car601.JPEG', 'car602.JPEG', 'car603.JPEG', 'car604.JPEG', 'car605.JPEG', 'car606.JPEG', 'car607.JPEG', 'car608.JPEG', 'car609.JPEG', 'car610.JPEG', 'car611.JPEG', 'car612.JPEG', 'car613.JPEG', 'car614.JPEG', 'car615.JPEG', 'car616.JPEG', 'car617.JPEG', 'car618.JPEG', 'car619.JPEG', 'car620.JPEG', 'car621.JPEG', 'car622.JPEG', 'car623.JPEG', 'car624.JPEG', 'car625.JPEG', 'car626.JPEG', 'car627.JPEG', 'car628.JPEG', 'car629.JPEG', 'car630.JPEG', 'car631.JPEG', 'car632.JPEG', 'car633.JPEG', 'car634.JPEG', 'car635.JPEG', 'car636.JPEG', 'car637.JPEG', 'car638.JPEG', 'car639.JPEG', 'car640.JPEG', 'car641.JPEG', 'car642.JPEG', 'car643.JPEG', 'car644.JPEG', 'car645.JPEG', 'car646.JPEG', 'car647.JPEG', 'car648.JPEG', 'car649.JPEG', 'car650.JPEG', 'car651.JPEG', 'car652.JPEG', 'car653.JPEG', 'car654.JPEG', 'car655.JPEG', 'car656.JPEG', 'car657.JPEG', 'car658.JPEG', 'car659.JPEG', 'car660.JPEG', 'car661.JPEG', 'car662.JPEG', 'car663.JPEG', 'car664.JPEG', 'car665.JPEG', 'car666.JPEG', 'car667.JPEG', 'car668.JPEG', 'car669.JPEG', 'car670.JPEG', 'car671.JPEG', 'car672.JPEG', 'car673.JPEG', 'car674.JPEG', 'car675.JPEG', 'car676.JPEG', 'car677.JPEG', 'car678.JPEG', 'car679.JPEG', 'car680.JPEG', 'car681.JPEG', 'car682.JPEG', 'car683.JPEG', 'car684.JPEG', 'car685.JPEG', 'car686.JPEG', 'car687.JPEG', 'car688.JPEG', 'car689.JPEG', 'car690.JPEG', 'car691.JPEG', 'car692.JPEG', 'car693.JPEG', 'car694.JPEG', 'car695.JPEG', 'car696.JPEG', 'car697.JPEG', 'car698.JPEG', 'car699.JPEG', 'car700.JPEG', 'car701.JPEG', 'car702.JPEG', 'car703.JPEG', 'car704.JPEG', 'car705.JPEG', 'car706.JPEG', 'car707.JPEG', 'car708.JPEG', 'car709.JPEG', 'car710.JPEG', 'car711.JPEG', 'car712.JPEG', 'car713.JPEG', 'car714.JPEG', 'car715.JPEG', 'car716.JPEG', 'car717.JPEG', 'car718.JPEG', 'car719.JPEG', 'car720.JPEG', 'car721.JPEG', 'car722.JPEG', 'car723.JPEG', 'car724.JPEG', 'car725.JPEG', 'car726.JPEG', 'car727.JPEG', 'car728.JPEG', 'car729.JPEG', 'car730.JPEG', 'car731.JPEG', 'car732.JPEG', 'car733.JPEG', 'car734.JPEG', 'car735.JPEG', 'car736.JPEG', 'car737.JPEG', 'car738.JPEG', 'car739.JPEG', 'car740.JPEG', 'car741.JPEG', 'car742.JPEG', 'car743.JPEG', 'car744.JPEG', 'car745.JPEG', 'car746.JPEG', 'car747.JPEG', 'car748.JPEG', 'car749.JPEG', 'car750.JPEG', 'car751.JPEG', 'car752.JPEG', 'car753.JPEG', 'car754.JPEG', 'car755.JPEG', 'car756.JPEG', 'car757.JPEG', 'car758.JPEG', 'car759.JPEG', 'car760.JPEG', 'car761.JPEG', 'car762.JPEG', 'car763.JPEG', 'car764.JPEG', 'car765.JPEG', 'car766.JPEG', 'car767.JPEG', 'car768.JPEG', 'car769.JPEG', 'car770.JPEG', 'car771.JPEG', 'car772.JPEG', 'car773.JPEG', 'car774.JPEG', 'car775.JPEG', 'car776.JPEG', 'car777.JPEG', 'car778.JPEG', 'car779.JPEG', 'car780.JPEG', 'car781.JPEG', 'car782.JPEG', 'car783.JPEG', 'car784.JPEG', 'car785.JPEG', 'car786.JPEG', 'car787.JPEG', 'car788.JPEG', 'car789.JPEG', 'car790.JPEG', 'car791.JPEG', 'car792.JPEG', 'car793.JPEG', 'car794.JPEG', 'car795.JPEG', 'car796.JPEG', 'car797.JPEG', 'car798.JPEG', 'car799.JPEG', 'car800.JPEG', 'car801.JPEG', 'car802.JPEG', 'car803.JPEG', 'car804.JPEG', 'car805.JPEG', 'car806.JPEG', 'car807.JPEG', 'car808.JPEG', 'car809.JPEG', 'car810.JPEG', 'car811.JPEG', 'car812.JPEG', 'car813.JPEG', 'car814.JPEG', 'car815.JPEG', 'car816.JPEG', 'car817.JPEG', 'car818.JPEG', 'car819.JPEG', 'car820.JPEG', 'car821.JPEG', 'car822.JPEG', 'car823.JPEG', 'car824.JPEG', 'car825.JPEG', 'car826.JPEG', 'car827.JPEG', 'car828.JPEG', 'car829.JPEG', 'car830.JPEG', 'car831.JPEG', 'car832.JPEG', 'car833.JPEG', 'car834.JPEG', 'car835.JPEG', 'car836.JPEG', 'car837.JPEG', 'car838.JPEG', 'car839.JPEG', 'car840.JPEG', 'car841.JPEG', 'car842.JPEG', 'car843.JPEG', 'car844.JPEG', 'car845.JPEG', 'car846.JPEG', 'car847.JPEG', 'car848.JPEG', 'car849.JPEG', 'car850.JPEG', 'car851.JPEG', 'car852.JPEG', 'car853.JPEG', 'car854.JPEG', 'car855.JPEG', 'car856.JPEG', 'car857.JPEG', 'car858.JPEG', 'car859.JPEG', 'car860.JPEG', 'car861.JPEG', 'car862.JPEG', 'car863.JPEG', 'car864.JPEG', 'car865.JPEG', 'car866.JPEG', 'car867.JPEG', 'car868.JPEG', 'car869.JPEG', 'car870.JPEG', 'car871.JPEG', 'car872.JPEG', 'car873.JPEG', 'car874.JPEG', 'car875.JPEG', 'car876.JPEG', 'car877.JPEG', 'car878.JPEG', 'car879.JPEG', 'car880.JPEG', 'car881.JPEG', 'car882.JPEG', 'car883.JPEG', 'car884.JPEG', 'car885.JPEG', 'car886.JPEG', 'car887.JPEG', 'car888.JPEG', 'car889.JPEG', 'car890.JPEG', 'car891.JPEG', 'car892.JPEG', 'car893.JPEG', 'car894.JPEG', 'car895.JPEG', 'car896.JPEG', 'car897.JPEG', 'car898.JPEG', 'car899.JPEG', 'car900.JPEG', 'car901.JPEG', 'car902.JPEG', 'car903.JPEG', 'car904.JPEG', 'car905.JPEG', 'car906.JPEG', 'car907.JPEG', 'car908.JPEG', 'car909.JPEG', 'car910.JPEG', 'car911.JPEG', 'car912.JPEG', 'car913.JPEG', 'car914.JPEG', 'car915.JPEG', 'car916.JPEG', 'car917.JPEG', 'car918.JPEG', 'car919.JPEG', 'car920.JPEG', 'car921.JPEG', 'car922.JPEG', 'car923.JPEG', 'car924.JPEG', 'car925.JPEG', 'car926.JPEG', 'car927.JPEG', 'car928.JPEG', 'car929.JPEG', 'car930.JPEG', 'car931.JPEG', 'car932.JPEG', 'car933.JPEG', 'car934.JPEG', 'car935.JPEG', 'car936.JPEG', 'car937.JPEG', 'car938.JPEG', 'car939.JPEG', 'car940.JPEG', 'car941.JPEG', 'car942.JPEG', 'car943.JPEG', 'car944.JPEG', 'car945.JPEG', 'car946.JPEG', 'car947.JPEG', 'car948.JPEG', 'car949.JPEG', 'car950.JPEG', 'car951.JPEG', 'car952.JPEG', 'car953.JPEG', 'car954.JPEG', 'car955.JPEG', 'car956.JPEG', 'car957.JPEG', 'car958.JPEG', 'car959.JPEG', 'car960.JPEG', 'car961.JPEG', 'car962.JPEG', 'car963.JPEG', 'car964.JPEG', 'car965.JPEG', 'car966.JPEG', 'car967.JPEG', 'car968.JPEG', 'car969.JPEG', 'car970.JPEG', 'car971.JPEG', 'car972.JPEG', 'car973.JPEG', 'car974.JPEG', 'car975.JPEG', 'car976.JPEG', 'car977.JPEG', 'car978.JPEG', 'car979.JPEG', 'car980.JPEG', 'car981.JPEG', 'car982.JPEG', 'car983.JPEG', 'car984.JPEG', 'car985.JPEG', 'car986.JPEG', 'car987.JPEG', 'car988.JPEG', 'car989.JPEG', 'car990.JPEG', 'car991.JPEG', 'car992.JPEG', 'car993.JPEG', 'car994.JPEG', 'car995.JPEG', 'car996.JPEG', 'car997.JPEG', 'car998.JPEG', 'car999.JPEG', 'car1000.JPEG', 'car1001.JPEG', 'car1002.JPEG', 'car1003.JPEG', 'car1004.JPEG', 'car1005.JPEG', 'car1006.JPEG', 'car1007.JPEG', 'car1008.JPEG', 'car1009.JPEG', 'car1010.JPEG', 'car1011.JPEG', 'car1012.JPEG', 'car1013.JPEG', 'car1014.JPEG', 'car1015.JPEG', 'car1016.JPEG', 'car1017.JPEG', 'car1018.JPEG', 'car1019.JPEG', 'car1020.JPEG', 'car1021.JPEG', 'car1022.JPEG', 'car1023.JPEG', 'car1024.JPEG', 'car1025.JPEG', 'car1026.JPEG', 'car1027.JPEG', 'car1028.JPEG', 'car1029.JPEG', 'car1030.JPEG', 'car1031.JPEG', 'car1032.JPEG', 'car1033.JPEG', 'car1034.JPEG', 'car1035.JPEG', 'car1036.JPEG', 'car1037.JPEG', 'car1038.JPEG', 'car1039.JPEG', 'car1040.JPEG', 'car1041.JPEG', 'car1042.JPEG', 'car1043.JPEG', 'car1044.JPEG', 'car1045.JPEG', 'car1046.JPEG', 'car1047.JPEG', 'car1048.JPEG', 'car1049.JPEG', 'car1050.JPEG', 'car1051.JPEG', 'car1052.JPEG', 'car1053.JPEG', 'car1054.JPEG', 'car1055.JPEG', 'car1056.JPEG', 'car1057.JPEG', 'car1058.JPEG', 'car1059.JPEG', 'car1060.JPEG', 'car1061.JPEG', 'car1062.JPEG', 'car1063.JPEG', 'car1064.JPEG', 'car1065.JPEG', 'car1066.JPEG', 'car1067.JPEG', 'car1068.JPEG', 'car1069.JPEG', 'car1070.JPEG', 'car1071.JPEG', 'car1072.JPEG', 'car1073.JPEG', 'car1074.JPEG', 'car1075.JPEG', 'car1076.JPEG', 'car1077.JPEG', 'car1078.JPEG', 'car1079.JPEG', 'car1080.JPEG', 'car1081.JPEG', 'car1082.JPEG', 'car1083.JPEG', 'car1084.JPEG', 'car1085.JPEG', 'car1086.JPEG', 'car1087.JPEG', 'car1088.JPEG', 'car1089.JPEG', 'car1090.JPEG', 'car1091.JPEG', 'car1092.JPEG', 'car1093.JPEG', 'car1094.JPEG', 'car1095.JPEG', 'car1096.JPEG', 'car1097.JPEG', 'car1098.JPEG', 'car1099.JPEG', 'car1100.JPEG', 'car1101.JPEG', 'car1102.JPEG', 'car1103.JPEG', 'car1104.JPEG', 'car1105.JPEG', 'car1106.JPEG', 'car1107.JPEG', 'car1108.JPEG', 'car1109.JPEG', 'car1110.JPEG', 'car1111.JPEG', 'car1112.JPEG', 'car1113.JPEG', 'car1114.JPEG', 'car1115.JPEG', 'car1116.JPEG', 'car1117.JPEG', 'car1118.JPEG', 'car1119.JPEG', 'car1120.JPEG', 'car1121.JPEG', 'car1122.JPEG', 'car1123.JPEG', 'car1124.JPEG', 'car1125.JPEG', 'car1126.JPEG', 'car1127.JPEG', 'car1128.JPEG', 'car1129.JPEG', 'car1130.JPEG', 'car1131.JPEG', 'car1132.JPEG', 'car1133.JPEG', 'car1134.JPEG', 'car1135.JPEG', 'car1136.JPEG', 'car1137.JPEG', 'car1138.JPEG', 'car1139.JPEG', 'car1140.JPEG', 'car1141.JPEG', 'car1142.JPEG', 'car1143.JPEG', 'car1144.JPEG', 'car1145.JPEG', 'car1146.JPEG', 'car1147.JPEG', 'car1148.JPEG', 'car1149.JPEG', 'car1150.JPEG', 'car1151.JPEG', 'car1152.JPEG', 'car1153.JPEG', 'car1154.JPEG', 'car1155.JPEG', 'car1156.JPEG', 'car1157.JPEG', 'car1158.JPEG', 'car1159.JPEG', 'car1160.JPEG', 'car1161.JPEG', 'car1162.JPEG', 'car1163.JPEG', 'car1164.JPEG', 'car1165.JPEG', 'car1166.JPEG', 'car1167.JPEG', 'car1168.JPEG', 'car1169.JPEG', 'car1170.JPEG', 'car1171.JPEG', 'car1172.JPEG', 'car1173.JPEG', 'car1174.JPEG', 'car1175.JPEG', 'car1176.JPEG', 'car1177.JPEG', 'car1178.JPEG', 'car1179.JPEG', 'car1180.JPEG', 'car1181.JPEG', 'car1182.JPEG', 'car1183.JPEG', 'car1184.JPEG', 'car1185.JPEG', 'car1186.JPEG', 'car1187.JPEG', 'car1188.JPEG', 'car1189.JPEG', 'car1190.JPEG', 'car1191.JPEG', 'car1192.JPEG', 'car1193.JPEG', 'car1194.JPEG', 'car1195.JPEG', 'car1196.JPEG', 'car1197.JPEG', 'car1198.JPEG', 'car1199.JPEG', 'car1200.JPEG', 'car1201.JPEG', 'car1202.JPEG', 'car1203.JPEG', 'car1204.JPEG', 'car1205.JPEG', 'car1206.JPEG', 'car1207.JPEG', 'car1208.JPEG', 'car1209.JPEG', 'car1210.JPEG', 'car1211.JPEG', 'car1212.JPEG', 'car1213.JPEG', 'car1214.JPEG', 'car1215.JPEG', 'car1216.JPEG', 'car1217.JPEG', 'car1218.JPEG', 'car1219.JPEG', 'car1220.JPEG', 'car1221.JPEG', 'car1222.JPEG', 'car1223.JPEG', 'car1224.JPEG', 'car1225.JPEG', 'car1226.JPEG', 'car1227.JPEG', 'car1228.JPEG', 'car1229.JPEG', 'car1230.JPEG', 'car1231.JPEG', 'car1232.JPEG', 'car1233.JPEG', 'car1234.JPEG', 'car1235.JPEG', 'car1236.JPEG', 'car1237.JPEG', 'car1238.JPEG', 'car1239.JPEG', 'car1240.JPEG', 'car1241.JPEG', 'car1242.JPEG', 'car1243.JPEG', 'car1244.JPEG', 'car1245.JPEG', 'car1246.JPEG', 'car1247.JPEG', 'car1248.JPEG', 'car1249.JPEG', 'car1250.JPEG', 'car1251.JPEG', 'car1252.JPEG', 'car1253.JPEG', 'car1254.JPEG', 'car1255.JPEG', 'car1256.JPEG', 'car1257.JPEG', 'car1258.JPEG', 'car1259.JPEG', 'car1260.JPEG', 'car1261.JPEG', 'car1262.JPEG', 'car1263.JPEG', 'car1264.JPEG', 'car1265.JPEG', 'car1266.JPEG', 'car1267.JPEG', 'car1268.JPEG', 'car1269.JPEG', 'car1270.JPEG', 'car1271.JPEG', 'car1272.JPEG', 'car1273.JPEG', 'car1274.JPEG', 'car1275.JPEG', 'car1276.JPEG', 'car1277.JPEG', 'car1278.JPEG', 'car1279.JPEG', 'car1280.JPEG', 'car1281.JPEG', 'car1282.JPEG', 'car1283.JPEG', 'car1284.JPEG', 'car1285.JPEG', 'car1286.JPEG', 'car1287.JPEG', 'car1288.JPEG', 'car1289.JPEG', 'car1290.JPEG', 'car1291.JPEG', 'car1292.JPEG', 'car1293.JPEG', 'car1294.JPEG', 'car1295.JPEG', 'car1296.JPEG', 'car1297.JPEG', 'car1298.JPEG', 'car1299.JPEG', 'car1300.JPEG', 'car1301.JPEG', 'car1302.JPEG', 'car1303.JPEG', 'car1304.JPEG', 'car1305.JPEG', 'car1306.JPEG', 'car1307.JPEG', 'car1308.JPEG', 'car1309.JPEG', 'car1310.JPEG', 'car1311.JPEG', 'car1312.JPEG', 'car1313.JPEG', 'car1314.JPEG', 'car1315.JPEG', 'car1316.JPEG', 'car1317.JPEG', 'car1318.JPEG', 'car1319.JPEG', 'car1320.JPEG', 'car1321.JPEG', 'car1322.JPEG', 'car1323.JPEG', 'car1324.JPEG', 'car1325.JPEG', 'car1326.JPEG', 'car1327.JPEG', 'car1328.JPEG', 'car1329.JPEG', 'car1330.JPEG', 'car1331.JPEG', 'car1332.JPEG', 'car1333.JPEG', 'car1334.JPEG', 'car1335.JPEG', 'car1336.JPEG', 'car1337.JPEG', 'car1338.JPEG', 'car1339.JPEG', 'car1340.JPEG', 'car1341.JPEG', 'car1342.JPEG', 'car1343.JPEG', 'car1344.JPEG', 'car1345.JPEG', 'car1346.JPEG', 'car1347.JPEG', 'car1348.JPEG', 'car1349.JPEG', 'car1350.JPEG', 'car1351.JPEG', 'car1352.JPEG', 'car1353.JPEG', 'car1354.JPEG', 'car1355.JPEG', 'car1356.JPEG', 'car1357.JPEG', 'car1358.JPEG', 'car1359.JPEG', 'car1360.JPEG', 'car1361.JPEG', 'car1362.JPEG', 'car1363.JPEG', 'car1364.JPEG', 'car1365.JPEG', 'car1366.JPEG', 'car1367.JPEG', 'car1368.JPEG', 'car1369.JPEG', 'car1370.JPEG', 'car1371.JPEG', 'car1372.JPEG', 'car1373.JPEG', 'car1374.JPEG', 'car1375.JPEG', 'car1376.JPEG', 'car1377.JPEG', 'car1378.JPEG', 'car1379.JPEG', 'car1380.JPEG', 'car1381.JPEG', 'car1382.JPEG', 'car1383.JPEG', 'car1384.JPEG', 'car1385.JPEG', 'car1386.JPEG', 'car1387.JPEG', 'car1388.JPEG', 'car1389.JPEG', 'car1390.JPEG', 'car1391.JPEG', 'car1392.JPEG', 'car1393.JPEG', 'car1394.JPEG', 'car1395.JPEG', 'car1396.JPEG', 'car1397.JPEG', 'car1398.JPEG', 'car1399.JPEG', 'car1400.JPEG', 'car1401.JPEG', 'car1402.JPEG', 'car1403.JPEG', 'car1404.JPEG', 'car1405.JPEG', 'car1406.JPEG', 'car1407.JPEG', 'car1408.JPEG', 'car1409.JPEG', 'car1410.JPEG', 'car1411.JPEG', 'car1412.JPEG', 'car1413.JPEG', 'car1414.JPEG', 'car1415.JPEG', 'car1416.JPEG', 'car1417.JPEG', 'car1418.JPEG', 'car1419.JPEG', 'car1420.JPEG', 'car1421.JPEG', 'car1422.JPEG', 'car1423.JPEG', 'car1424.JPEG', 'car1425.JPEG', 'car1426.JPEG', 'car1427.JPEG', 'car1428.JPEG', 'car1429.JPEG', 'car1430.JPEG', 'car1431.JPEG', 'car1432.JPEG', 'car1433.JPEG', 'car1434.JPEG', 'car1435.JPEG', 'car1436.JPEG', 'car1437.JPEG', 'car1438.JPEG', 'car1439.JPEG', 'car1440.JPEG', 'car1441.JPEG', 'car1442.JPEG', 'car1443.JPEG', 'car1444.JPEG', 'car1445.JPEG', 'car1446.JPEG', 'car1447.JPEG', 'car1448.JPEG', 'car1449.JPEG', 'car1450.JPEG', 'car1451.JPEG', 'car1452.JPEG', 'car1453.JPEG', 'car1454.JPEG', 'car1455.JPEG', 'car1456.JPEG', 'car1457.JPEG', 'car1458.JPEG', 'car1459.JPEG', 'car1460.JPEG', 'car1461.JPEG', 'car1462.JPEG', 'car1463.JPEG', 'car1464.JPEG', 'car1465.JPEG', 'car1466.JPEG', 'car1467.JPEG', 'car1468.JPEG', 'car1469.JPEG', 'car1470.JPEG', 'car1471.JPEG', 'car1472.JPEG', 'car1473.JPEG', 'car1474.JPEG', 'car1475.JPEG', 'car1476.JPEG', 'car1477.JPEG', 'car1478.JPEG', 'car1479.JPEG', 'car1480.JPEG', 'car1481.JPEG', 'car1482.JPEG', 'car1483.JPEG', 'car1484.JPEG', 'car1485.JPEG', 'car1486.JPEG', 'car1487.JPEG', 'car1488.JPEG', 'car1489.JPEG', 'car1490.JPEG', 'car1491.JPEG', 'car1492.JPEG', 'car1493.JPEG', 'car1494.JPEG', 'car1495.JPEG', 'car1496.JPEG', 'car1497.JPEG', 'car1498.JPEG', 'car1499.JPEG', 'car1500.JPEG', 'car1501.JPEG', 'car1502.JPEG', 'car1503.JPEG', 'car1504.JPEG', 'car1505.JPEG', 'car1506.JPEG', 'car1507.JPEG', 'car1508.JPEG', 'car1509.JPEG', 'car1510.JPEG', 'car1511.JPEG', 'car1512.JPEG', 'car1513.JPEG', 'car1514.JPEG', 'car1515.JPEG', 'car1516.JPEG', 'car1517.JPEG', 'car1518.JPEG', 'car1519.JPEG', 'car1520.JPEG', 'car1521.JPEG', 'car1522.JPEG', 'car1523.JPEG', 'car1524.JPEG', 'car1525.JPEG', 'car1526.JPEG', 'car1527.JPEG', 'car1528.JPEG', 'car1529.JPEG', 'car1530.JPEG', 'car1531.JPEG', 'car1532.JPEG', 'car7.JPEG', 'car8.JPEG', 'car9.JPEG', 'car10.JPEG', 'car11.JPEG', 'car12.JPEG', 'car13.JPEG', 'car14.JPEG', 'car15.JPEG', 'car16.JPEG', 'car17.JPEG', 'car18.JPEG', 'car19.JPEG', 'car20.JPEG', 'car21.JPEG', 'car22.JPEG', 'car23.JPEG', 'car24.JPEG', 'car25.JPEG', 'car26.JPEG', 'car27.JPEG', 'car28.JPEG', 'car29.JPEG', 'car30.JPEG', 'car31.JPEG', 'car32.JPEG', 'car33.JPEG', 'car34.JPEG', 'car35.JPEG', 'car36.JPEG', 'car37.JPEG', 'car38.JPEG', 'car39.JPEG', 'car40.JPEG', 'car41.JPEG', 'car42.JPEG', 'car43.JPEG', 'car44.JPEG', 'car45.JPEG', 'car46.JPEG', 'car47.JPEG', 'car48.JPEG', 'car49.JPEG', 'car50.JPEG', 'car51.JPEG', 'car52.JPEG', 'car53.JPEG', 'car54.JPEG', 'car55.JPEG', 'car56.JPEG', 'car57.JPEG', 'car58.JPEG', 'car59.JPEG', 'car60.JPEG', 'car61.JPEG', 'car62.JPEG', 'car63.JPEG', 'car64.JPEG', 'car65.JPEG', 'car66.JPEG', 'car67.JPEG', 'car68.JPEG', 'car69.JPEG', 'car70.JPEG', 'car71.JPEG', 'car72.JPEG', 'car73.JPEG', 'car74.JPEG', 'car75.JPEG', 'car76.JPEG', 'car77.JPEG', 'car78.JPEG', 'car79.JPEG', 'car80.JPEG', 'car81.JPEG', 'car82.JPEG', 'car83.JPEG', 'car84.JPEG', 'car85.JPEG', 'car86.JPEG', 'car87.JPEG', 'car88.JPEG', 'car89.JPEG', 'car90.JPEG', 'car91.JPEG', 'car92.JPEG', 'car93.JPEG', 'car94.JPEG', 'car95.JPEG', 'car96.JPEG', 'car97.JPEG', 'car98.JPEG', 'car99.JPEG', 'car100.JPEG', 'car101.JPEG', 'car102.JPEG', 'car103.JPEG', 'car104.JPEG', 'car105.JPEG', 'car106.JPEG', 'car107.JPEG', 'car108.JPEG', 'car109.JPEG', 'car110.JPEG', 'car111.JPEG', 'car112.JPEG', 'car113.JPEG', 'car114.JPEG', 'car115.JPEG', 'car116.JPEG', 'car117.JPEG', 'car118.JPEG', 'car119.JPEG', 'car120.JPEG', 'car121.JPEG', 'car122.JPEG', 'car123.JPEG', 'car124.JPEG', 'car125.JPEG', 'car126.JPEG', 'car127.JPEG', 'car128.JPEG', 'car129.JPEG', 'car130.JPEG', 'car131.JPEG', 'car132.JPEG', 'car133.JPEG', 'car134.JPEG', 'car135.JPEG', 'car136.JPEG', 'car137.JPEG', 'car138.JPEG', 'car139.JPEG', 'car140.JPEG', 'car141.JPEG', 'car142.JPEG', 'car143.JPEG', 'car144.JPEG', 'car145.JPEG', 'car146.JPEG', 'car147.JPEG', 'car148.JPEG', 'car149.JPEG', 'car150.JPEG', 'car151.JPEG', 'car152.JPEG', 'car153.JPEG', 'car154.JPEG', 'car155.JPEG', 'car156.JPEG', 'car157.JPEG', 'car158.JPEG', 'car159.JPEG', 'car160.JPEG', 'car161.JPEG', 'car162.JPEG', 'car163.JPEG', 'car164.JPEG', 'car165.JPEG', 'car166.JPEG', 'car167.JPEG', 'car168.JPEG', 'car169.JPEG', 'car170.JPEG', 'car171.JPEG', 'car172.JPEG', 'car173.JPEG', 'car174.JPEG', 'car175.JPEG', 'car176.JPEG', 'car177.JPEG', 'car178.JPEG', 'car179.JPEG', 'car180.JPEG', 'car181.JPEG', 'car182.JPEG', 'car183.JPEG', 'car184.JPEG', 'car185.JPEG', 'car186.JPEG', 'car187.JPEG', 'car188.JPEG', 'car189.JPEG', 'car190.JPEG', 'car191.JPEG', 'car192.JPEG', 'car193.JPEG', 'car194.JPEG', 'car195.JPEG', 'car196.JPEG', 'car197.JPEG', 'car0.JPEG', 'car198.JPEG', 'car199.JPEG', 'car1.JPEG', 'car200.JPEG', 'car2.JPEG', 'car3.JPEG', 'car201.JPEG', 'car202.JPEG', 'car4.JPEG', 'car203.JPEG', 'car5.JPEG', 'car204.JPEG', 'car6.JPEG', 'car205.JPEG', 'car206.JPEG', 'car207.JPEG', 'car208.JPEG', 'car209.JPEG', 'car210.JPEG', 'car211.JPEG', 'car212.JPEG', 'car213.JPEG', 'car214.JPEG', 'car215.JPEG', 'car216.JPEG', 'car217.JPEG', 'car218.JPEG', 'car219.JPEG', 'car220.JPEG', 'car221.JPEG', 'car222.JPEG', 'car223.JPEG', 'car224.JPEG', 'car225.JPEG', 'car226.JPEG', 'car227.JPEG', 'car228.JPEG', 'car229.JPEG', 'car230.JPEG', 'car231.JPEG', 'car232.JPEG', 'car233.JPEG', 'car234.JPEG', 'car235.JPEG', 'car236.JPEG', 'car237.JPEG', 'car238.JPEG', 'car239.JPEG', 'car240.JPEG', 'car241.JPEG', 'car242.JPEG', 'car243.JPEG', 'car244.JPEG', 'car245.JPEG', 'car246.JPEG', 'car247.JPEG', 'car248.JPEG', 'car249.JPEG', 'car250.JPEG', 'car251.JPEG', 'car252.JPEG', 'car253.JPEG', 'car254.JPEG', 'car255.JPEG', 'car256.JPEG', 'car257.JPEG', 'car258.JPEG', 'car259.JPEG', 'car260.JPEG', 'car261.JPEG', 'car262.JPEG', 'car263.JPEG', 'car264.JPEG', 'car265.JPEG', 'car266.JPEG', 'car267.JPEG', 'car268.JPEG', 'car269.JPEG', 'car270.JPEG', 'car271.JPEG', 'car272.JPEG', 'car273.JPEG', 'car274.JPEG', 'car275.JPEG', 'car276.JPEG', 'car277.JPEG', 'car278.JPEG', 'car279.JPEG', 'car280.JPEG', 'car281.JPEG', 'car282.JPEG', 'car283.JPEG', 'car284.JPEG', 'car285.JPEG', 'car286.JPEG', 'car287.JPEG', 'car288.JPEG', 'car289.JPEG', 'car290.JPEG', 'car291.JPEG', 'car292.JPEG', 'car293.JPEG', 'car294.JPEG', 'car295.JPEG', 'car296.JPEG', 'car297.JPEG', 'car298.JPEG', 'car299.JPEG', 'car300.JPEG', 'car301.JPEG', 'car302.JPEG', 'car303.JPEG', 'car304.JPEG', 'car305.JPEG', 'car306.JPEG', 'car307.JPEG', 'car308.JPEG', 'car309.JPEG', 'car310.JPEG', 'car311.JPEG', 'car312.JPEG', 'car313.JPEG', 'car314.JPEG', 'car315.JPEG', 'car316.JPEG', 'car317.JPEG', 'car318.JPEG', 'car319.JPEG', 'car320.JPEG', 'car321.JPEG', 'car322.JPEG', 'car323.JPEG', 'car324.JPEG', 'car325.JPEG', 'car326.JPEG', 'car327.JPEG', 'car328.JPEG', 'car329.JPEG', 'car330.JPEG', 'car331.JPEG', 'car332.JPEG', 'car333.JPEG', 'car334.JPEG', 'car335.JPEG', 'car336.JPEG', 'car337.JPEG', 'car338.JPEG', 'car339.JPEG', 'car340.JPEG', 'car341.JPEG', 'car342.JPEG', 'car343.JPEG', 'car344.JPEG', 'car345.JPEG', 'car346.JPEG', 'car347.JPEG', 'car348.JPEG', 'car349.JPEG', 'car350.JPEG', 'car351.JPEG', 'car352.JPEG', 'car353.JPEG', 'car354.JPEG', 'car355.JPEG', 'car356.JPEG', 'car357.JPEG', 'car358.JPEG', 'car359.JPEG', 'car360.JPEG', 'car361.JPEG', 'car362.JPEG', 'car363.JPEG', 'car364.JPEG', 'car365.JPEG', 'car366.JPEG', 'car367.JPEG', 'car368.JPEG', 'car369.JPEG', 'car370.JPEG', 'car371.JPEG', 'car372.JPEG', 'car373.JPEG', 'car374.JPEG', 'car375.JPEG', 'car376.JPEG', 'car377.JPEG', 'car378.JPEG', 'car379.JPEG', 'car380.JPEG', 'car381.JPEG', 'car382.JPEG', 'car383.JPEG', 'car384.JPEG', 'car385.JPEG', 'car386.JPEG', 'car387.JPEG', 'car388.JPEG', 'car389.JPEG', 'car390.JPEG', 'car391.JPEG', 'car392.JPEG', 'car393.JPEG', 'car394.JPEG', 'car395.JPEG', 'car396.JPEG', 'car397.JPEG', 'car398.JPEG', 'car399.JPEG', 'car400.JPEG', 'car401.JPEG', 'car402.JPEG', 'car403.JPEG', 'car404.JPEG', 'car405.JPEG', 'car406.JPEG', 'car407.JPEG', 'car408.JPEG', 'car409.JPEG', 'car410.JPEG', 'car411.JPEG', 'car412.JPEG', 'car413.JPEG', 'car414.JPEG', 'car415.JPEG', 'car416.JPEG', 'car417.JPEG', 'car418.JPEG', 'car419.JPEG', 'car420.JPEG', 'car421.JPEG', 'car422.JPEG', 'car423.JPEG', 'car424.JPEG', 'car425.JPEG', 'car426.JPEG', 'car427.JPEG', 'car428.JPEG', 'car429.JPEG', 'car430.JPEG', 'car431.JPEG', 'car432.JPEG', 'car433.JPEG', 'car434.JPEG', 'car435.JPEG', 'car436.JPEG', 'car437.JPEG', 'car438.JPEG', 'car439.JPEG', 'car440.JPEG', 'car441.JPEG', 'car442.JPEG', 'car443.JPEG', 'car444.JPEG', 'car445.JPEG', 'car446.JPEG', 'car447.JPEG', 'car448.JPEG', 'car449.JPEG', 'car450.JPEG', 'car451.JPEG', 'car452.JPEG', 'car453.JPEG', 'car454.JPEG', 'car455.JPEG', 'car456.JPEG', 'car457.JPEG', 'car458.JPEG', 'car459.JPEG', 'car460.JPEG', 'car461.JPEG', 'car462.JPEG', 'car463.JPEG', 'car464.JPEG', 'car465.JPEG', 'car466.JPEG', 'car467.JPEG', 'car468.JPEG', 'car469.JPEG', 'car470.JPEG', 'car471.JPEG', 'car472.JPEG', 'car473.JPEG', 'car474.JPEG', 'car475.JPEG', 'car476.JPEG', 'car477.JPEG', 'car478.JPEG', 'car479.JPEG', 'car480.JPEG', 'car481.JPEG', 'car482.JPEG', 'car483.JPEG', 'car484.JPEG', 'car485.JPEG', 'car486.JPEG', 'car487.JPEG', 'car488.JPEG', 'car489.JPEG', 'car490.JPEG', 'car491.JPEG', 'car492.JPEG', 'car493.JPEG', 'car494.JPEG', 'car495.JPEG', 'car496.JPEG', 'car497.JPEG', 'car498.JPEG', 'car499.JPEG', 'car500.JPEG', 'car501.JPEG', 'car502.JPEG', 'car503.JPEG', 'car504.JPEG', 'car505.JPEG', 'car506.JPEG', 'car507.JPEG', 'car508.JPEG', 'car509.JPEG', 'car510.JPEG', 'car511.JPEG', 'car512.JPEG', 'car513.JPEG', 'car514.JPEG', 'car515.JPEG', 'car516.JPEG', 'car517.JPEG', 'car518.JPEG', 'car519.JPEG', 'car520.JPEG', 'car521.JPEG', 'car522.JPEG', 'car523.JPEG', 'car524.JPEG', 'car525.JPEG', 'car526.JPEG', 'car527.JPEG', 'car528.JPEG', 'car529.JPEG', 'car530.JPEG', 'car531.JPEG', 'car532.JPEG']

Case of image resizing:

In [ ]:
#trying to load this picture
#Image cannot be found:
#FileNotFoundError: [Errno 2] No such file or directory: 
#'/content/drive/My Drive/2022_Projekt_badawczy/ZPD_SZUM/finaldata/car/car3532.jpg'
# ANSWER: I need to provided .JPEG with capital letters at the end of the file name
image2 = Image.open(final_data + 'car/car3532.JPEG')
plt.imshow(image2);
In [ ]:
print(image2.size)
img_resized = image2.resize((256,256))
print(img_resized.size)
(700, 438)
(256, 256)
In [ ]:
plt.imshow(img_resized);

Case of image stretching:

In [ ]:
df[df['size'] < (256,256)] 
#bus1100, bus1101 - 64x64
#truck157 - 250x166
#truck160 - 120x120
In [ ]:
#in case of the bus, the streching is hard to see by eye
image2 = Image.open(final_data + 'bus/bus1100.JPEG')
plt.imshow(image2)
plt.show()
print(image2.size)
img_resized = image2.resize((256,256))
print(img_resized.size)
plt.imshow(img_resized)
plt.show()
(64, 64)
(256, 256)
In [ ]:
#for this car, streching works fine
image2 = Image.open(final_data + 'truck/truck157.JPEG')
plt.imshow(image2)
plt.show()
print(image2.size)
img_resized = image2.resize((256,256))
print(img_resized.size)
plt.imshow(img_resized)
plt.show()
(250, 166)
(256, 256)
In [ ]:
# and for this car, streching works fine too
image2 = Image.open(final_data + 'truck/truck160.JPEG')
plt.imshow(image2)
plt.show()
print(image2.size)
img_resized = image2.resize((256,256))
print(img_resized.size)
plt.imshow(img_resized)
plt.show()
(120, 120)
(256, 256)

Automatic image preprocessing

Preprocessed data will be saved in "preprocesessed" folder.

In [ ]:
df
Out[ ]:
name mode format size R G B source datetime resolutionUnit ... brightness aperture phonemake phonemodel ISOspeedratings flash focallength sensingmethod height width
0 motorcycle0 RGB JPEG (2976, 2976) [13318, 5107, 3702, 4388, 3777, 4177, 4849, 48... [6249, 5455, 3114, 2976, 3528, 3580, 4420, 451... [9755, 3928, 2417, 2805, 4408, 4082, 4301, 482... collected 2022:03:14 17:13:44 2.0 ... (233, 100) (169, 100) Xiaomi Mi Note 3 138 24 (3820, 1000) 2.0 2976 2976
1 motorcycle1 RGB JPEG (3024, 3024) [340, 62, 68, 67, 94, 109, 118, 124, 157, 192,... [3, 5, 4, 3, 7, 4, 8, 12, 19, 21, 22, 33, 34, ... [27, 7, 2, 5, 7, 7, 14, 18, 15, 31, 27, 32, 49... collected 2022:03:14 14:49:39 2.0 ... (544, 100) (252, 100) samsung SM-G965F 50 0 (430, 100) NaN 3024 3024
2 motorcycle2 RGB JPEG (3024, 3024) [4, 0, 3, 1, 0, 1, 2, 5, 3, 5, 4, 6, 1, 4, 3, ... [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, ... collected 2022:03:14 14:49:32 2.0 ... (574, 100) (252, 100) samsung SM-G965F 50 0 (430, 100) NaN 3024 3024
3 motorcycle3 RGB JPEG (3024, 3024) [12, 4, 6, 16, 12, 16, 30, 27, 23, 30, 40, 42,... [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, ... [0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 0, 1, 0, 2, ... collected 2022:03:14 14:49:38 2.0 ... (546, 100) (252, 100) samsung SM-G965F 50 0 (430, 100) NaN 3024 3024
4 motorcycle4 RGB JPEG (3024, 3024) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... collected 2022:03:14 14:49:35 2.0 ... (454, 100) (252, 100) samsung SM-G965F 64 0 (430, 100) NaN 3024 3024
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
8694 truck1088 RGB JPEG (1024, 768) [1175, 765, 858, 1051, 1276, 1322, 1524, 1642,... [213, 456, 639, 1157, 1208, 1520, 1863, 2045, ... [5721, 2342, 3063, 3450, 3529, 3870, 4005, 400... downloaded NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN 1024 768
8695 truck1089 RGB JPEG (434, 326) [5, 1, 2, 0, 2, 1, 4, 4, 5, 4, 10, 19, 37, 71,... [5, 1, 2, 0, 2, 2, 5, 4, 6, 2, 11, 22, 37, 65,... [1, 0, 4, 1, 4, 0, 0, 2, 6, 5, 10, 18, 46, 75,... downloaded NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN 434 326
8696 truck1090 RGB JPEG (720, 313) [3348, 2183, 1554, 1171, 1097, 1007, 1019, 906... [5165, 2953, 1884, 1710, 1858, 1845, 1686, 160... [2973, 1779, 1343, 1253, 992, 898, 883, 667, 6... downloaded NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN 720 313
8697 truck1091 RGB JPEG (380, 228) [294, 77, 72, 74, 107, 169, 155, 101, 89, 96, ... [101, 52, 39, 37, 46, 48, 42, 55, 49, 71, 76, ... [132, 32, 46, 37, 35, 36, 43, 45, 32, 51, 45, ... downloaded NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN 380 228
8698 truck1092 RGB JPEG (285, 213) [101, 31, 58, 84, 112, 218, 333, 327, 343, 423... [25, 28, 39, 51, 77, 168, 220, 269, 254, 273, ... [207, 49, 75, 91, 120, 131, 231, 248, 264, 288... downloaded NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN 285 213

8699 rows × 22 columns

Initialize temporary df to work on a copy of the document
In [ ]:
tmp_df = df.copy()
In [ ]:
tmp_df
Out[ ]:
name mode format size R G B source datetime resolutionUnit ... brightness aperture phonemake phonemodel ISOspeedratings flash focallength sensingmethod height width
0 motorcycle0 RGB JPEG (2976, 2976) [13318, 5107, 3702, 4388, 3777, 4177, 4849, 48... [6249, 5455, 3114, 2976, 3528, 3580, 4420, 451... [9755, 3928, 2417, 2805, 4408, 4082, 4301, 482... collected 2022:03:14 17:13:44 2.0 ... (233, 100) (169, 100) Xiaomi Mi Note 3 138 24 (3820, 1000) 2.0 2976 2976
1 motorcycle1 RGB JPEG (3024, 3024) [340, 62, 68, 67, 94, 109, 118, 124, 157, 192,... [3, 5, 4, 3, 7, 4, 8, 12, 19, 21, 22, 33, 34, ... [27, 7, 2, 5, 7, 7, 14, 18, 15, 31, 27, 32, 49... collected 2022:03:14 14:49:39 2.0 ... (544, 100) (252, 100) samsung SM-G965F 50 0 (430, 100) NaN 3024 3024
2 motorcycle2 RGB JPEG (3024, 3024) [4, 0, 3, 1, 0, 1, 2, 5, 3, 5, 4, 6, 1, 4, 3, ... [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, ... collected 2022:03:14 14:49:32 2.0 ... (574, 100) (252, 100) samsung SM-G965F 50 0 (430, 100) NaN 3024 3024
3 motorcycle3 RGB JPEG (3024, 3024) [12, 4, 6, 16, 12, 16, 30, 27, 23, 30, 40, 42,... [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, ... [0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 0, 1, 0, 2, ... collected 2022:03:14 14:49:38 2.0 ... (546, 100) (252, 100) samsung SM-G965F 50 0 (430, 100) NaN 3024 3024
4 motorcycle4 RGB JPEG (3024, 3024) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... collected 2022:03:14 14:49:35 2.0 ... (454, 100) (252, 100) samsung SM-G965F 64 0 (430, 100) NaN 3024 3024
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
8694 truck1088 RGB JPEG (1024, 768) [1175, 765, 858, 1051, 1276, 1322, 1524, 1642,... [213, 456, 639, 1157, 1208, 1520, 1863, 2045, ... [5721, 2342, 3063, 3450, 3529, 3870, 4005, 400... downloaded NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN 1024 768
8695 truck1089 RGB JPEG (434, 326) [5, 1, 2, 0, 2, 1, 4, 4, 5, 4, 10, 19, 37, 71,... [5, 1, 2, 0, 2, 2, 5, 4, 6, 2, 11, 22, 37, 65,... [1, 0, 4, 1, 4, 0, 0, 2, 6, 5, 10, 18, 46, 75,... downloaded NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN 434 326
8696 truck1090 RGB JPEG (720, 313) [3348, 2183, 1554, 1171, 1097, 1007, 1019, 906... [5165, 2953, 1884, 1710, 1858, 1845, 1686, 160... [2973, 1779, 1343, 1253, 992, 898, 883, 667, 6... downloaded NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN 720 313
8697 truck1091 RGB JPEG (380, 228) [294, 77, 72, 74, 107, 169, 155, 101, 89, 96, ... [101, 52, 39, 37, 46, 48, 42, 55, 49, 71, 76, ... [132, 32, 46, 37, 35, 36, 43, 45, 32, 51, 45, ... downloaded NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN 380 228
8698 truck1092 RGB JPEG (285, 213) [101, 31, 58, 84, 112, 218, 333, 327, 343, 423... [25, 28, 39, 51, 77, 168, 220, 269, 254, 273, ... [207, 49, 75, 91, 120, 131, 231, 248, 264, 288... downloaded NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN 285 213

8699 rows × 22 columns

In [ ]:
type(tmp_df.source[tmp_df.name == 'bus30'].item())
Out[ ]:
str
In [ ]:
class_names = ['motorcycle', 'bicycle', 'bus', 'car', 'truck']
images_names_list = list()
images_modes_list = list()
images_formats_list = list()
images_sizes_list = list()
images_heights_list = list()
images_widths_list = list()
images_red_pixels_list = list()
images_green_pixels_list = list()
images_blue_pixels_list = list()
images_sources_list = list()
metadata_datetime_list = list()
metadata_resolutionunit_list = list()
metadata_Xresolution_list = list()
metadata_Yresolution_list = list()
metadata_brightnessvalue_list = list()
metadata_aperturevalue_list = list()
metadata_phonemake_list = list()
metadata_phonemodel_list = list()
metadata_ISOspeedratings_list = list()
metadata_flash_list = list()
metadata_focallength_list = list()
metadata_sensingmethod_list = list()

for class_name in class_names:
  #paths
  imageFinalFilePath = Path.joinpath(final_data_dir, class_name)
  imagePreprocessedFilePath = Path(preprocessed_data, class_name)
  #collect images from first source
  for imageid, imagePath in enumerate(list(imageFinalFilePath.glob('*.*'))):
    #each class starts id from 0
    # load image
    image = Image.open(imagePath) 
    # PERFORM RESIZING
    img_resized = image.resize((256,256))
    image = img_resized
    # save in the JPEG format
    #/content/drive/MyDrive/2022_Projekt_badawczy/ZPD_SZUM/finaldata/motorcycle/motorcycle1537.JPEG
    str_to_split = "/content/drive/My Drive/2022_Projekt_badawczy/ZPD_SZUM/finaldata/" + class_name + "/"
    image_name = str(imagePath).split(str_to_split)[1]
    image_name = image_name.split('.')[0]
    image_mode = image.mode
    if image_mode == 'RGBA':
      image = image.convert(mode='RGB')
      image_mode = image.mode
    image_format = 'JPEG'
    image_size = image.size
    image_height = image.size[0]
    image_width = image.size[1]
    #image source
    image_source = tmp_df.source[tmp_df.name == image_name].item()
    pixels = image.histogram()
    red_pixels = pixels[0:256]      # indicates Red
    green_pixels = pixels[256:512]  # indicated Green
    blue_pixels = pixels[512:768]   # indicates Blue
    #print(image_name, image_mode, image_format, image_size, red_pixels, green_pixels, blue_pixels)
    #SAVE IMAGES DATA
    images_names_list.append(image_name)
    images_modes_list.append(image_mode)
    images_formats_list.append(image_format)
    images_sizes_list.append(image_size)
    images_heights_list.append(image_height)
    images_widths_list.append(image_width)
    images_red_pixels_list.append(red_pixels)
    images_green_pixels_list.append(green_pixels)
    images_blue_pixels_list.append(blue_pixels)
    images_sources_list.append(image_source)
    
    #EXTRACT METADATA FROM TAGS
    img_exif = image.getexif()
    if bool(img_exif) == False:
      metadata_datetime = ''
      metadata_resolutionunit = ''
      metadata_Xresolution = ''
      metadata_Yresolution = ''
      metadata_brightnessvalue = ''
      metadata_aperturevalue = ''
      metadata_phonemake = ''
      metadata_phonemodel = ''
      metadata_ISOspeedratings = ''
      metadata_flash = ''
      metadata_focallength = ''
      metadata_sensingmethod = ''
      #print('Sorry, image has no exif data.')
    else:
      for key, val in img_exif.items():
        #datetime
        if key == 306:
          metadata_datetime = val
        if 306 not in img_exif.keys():
          metadata_datetime = ''
        #metadata_resolutionunit
        if key == 296:
          metadata_resolutionunit = val
        if 296 not in img_exif.keys():
          metadata_resolutionunit = ''
        #metadata_Xresolution
        if key == 282:
          metadata_Xresolution = val
        if 282 not in img_exif.keys():
          metadata_Xresolution = ''
        #metadata_Yresolution
        if key == 283:
          metadata_Yresolution = val
        if 283 not in img_exif.keys():
          metadata_Yresolution = ''
        #metadata_brightnessvalue
        if key == 37379:
          metadata_brightnessvalue = val
        if 37379 not in img_exif.keys():
          metadata_brightnessvalue = ''
        #metadata_aperturevalue
        if key == 37378:
          metadata_aperturevalue = val
        if 37378 not in img_exif.keys():
          metadata_aperturevalue = ''
        #metadata_phonemake
        if key == 271:
          metadata_phonemake = val
        if 271 not in img_exif.keys():
          metadata_phonemake = ''
        #metadata_phonemodel
        if key == 272:
          metadata_phonemodel = val
        if 272 not in img_exif.keys():
          metadata_phonemodel = ''
        #metadata_ISOspeedratings
        if key == 34855:
          metadata_ISOspeedratings = val
        if 34855 not in img_exif.keys():
          metadata_ISOspeedratings = ''
        #metadata_flash
        if key == 37385:
          metadata_flash = val
        if 37385 not in img_exif.keys():
          metadata_flash = ''
        #metadata_focallength
        if key == 37386:
          metadata_focallength = val
        if 37386 not in img_exif.keys():
          metadata_focallength = ''
        #metadata_sensingmethod
        if key == 41495:
          metadata_sensingmethod = val
        if 41495 not in img_exif.keys():
          metadata_sensingmethod = ''         
    #SAVE IMAGES METADATA
    metadata_datetime_list.append(metadata_datetime)
    metadata_resolutionunit_list.append(metadata_resolutionunit)
    metadata_Xresolution_list.append(metadata_Xresolution)
    metadata_Yresolution_list.append(metadata_Yresolution)
    metadata_brightnessvalue_list.append(metadata_brightnessvalue)
    metadata_aperturevalue_list.append(metadata_aperturevalue)
    metadata_phonemake_list.append(metadata_phonemake)
    metadata_phonemodel_list.append(metadata_phonemodel)
    metadata_ISOspeedratings_list.append(metadata_ISOspeedratings)
    metadata_flash_list.append(metadata_flash)
    metadata_focallength_list.append(metadata_focallength)
    metadata_sensingmethod_list.append(metadata_sensingmethod)
    #SAVE IMAGE
    #image.save(Path.joinpath(imagePreprocessedFilePath, f'{image_name}.{str(image_format)}'), format=image_format)
    #optionally - show image
    if imageid % 250 == 0:
      plt.imshow(image)
      plt.show()
    #CLOSE IMAGE (necessary to release memory, because load() function were not called)
    image.close()

#after all iterations
data_dictionary = {'name': images_names_list, 
                   'mode': images_modes_list, 
                   'format': images_formats_list, 
                   'img_size': images_sizes_list, 
                   'height': images_heights_list, 
                   'width': images_widths_list,
                   'R': images_red_pixels_list, 
                   'G': images_green_pixels_list, 
                   'B': images_blue_pixels_list, 
                   'source': images_sources_list,
                   'datetime': metadata_datetime_list, 
                   'resolutionUnit': metadata_resolutionunit_list, 
                   'Xresolution': metadata_Xresolution_list, 
                   'Yresolution': metadata_Yresolution_list, 
                   'brightness': metadata_brightnessvalue_list, 
                   'aperture': metadata_aperturevalue_list, 
                   'phonemake': metadata_phonemake_list, 
                   'phonemodel': metadata_phonemodel_list, 
                   'ISOspeedratings': metadata_ISOspeedratings_list, 
                   'flash': metadata_flash_list, 
                   'focallength': metadata_focallength_list, 
                   'sensingmethod': metadata_sensingmethod_list}
preprocessed_df = pd.DataFrame(data_dictionary)
display(preprocessed_df)
name mode format img_size height width R G B source ... Xresolution Yresolution brightness aperture phonemake phonemodel ISOspeedratings flash focallength sensingmethod
0 motorcycle1537 RGB JPEG (256, 256) 256 256 [43, 17, 8, 22, 26, 19, 30, 30, 33, 34, 52, 66... [197, 48, 59, 53, 81, 87, 104, 101, 123, 137, ... [243, 49, 77, 82, 83, 91, 100, 117, 118, 158, ... downloaded ...
1 motorcycle1538 RGB JPEG (256, 256) 256 256 [424, 161, 161, 250, 287, 334, 456, 483, 482, ... [662, 254, 276, 345, 510, 611, 691, 663, 604, ... [797, 196, 258, 240, 347, 414, 478, 485, 513, ... downloaded ...
2 motorcycle1539 RGB JPEG (256, 256) 256 256 [9, 3, 3, 7, 10, 13, 11, 9, 20, 30, 21, 26, 36... [34, 10, 9, 13, 17, 17, 15, 21, 34, 34, 36, 41... [93, 8, 15, 19, 20, 28, 29, 24, 40, 49, 47, 52... downloaded ...
3 motorcycle1540 RGB JPEG (256, 256) 256 256 [79, 26, 25, 29, 34, 50, 49, 45, 52, 65, 58, 5... [118, 34, 42, 41, 44, 58, 65, 62, 93, 74, 84, ... [86, 13, 27, 37, 42, 49, 46, 54, 61, 53, 89, 6... downloaded ...
4 motorcycle1541 RGB JPEG (256, 256) 256 256 [179, 73, 73, 92, 89, 96, 125, 129, 140, 148, ... [234, 62, 86, 88, 89, 116, 118, 142, 157, 156,... [206, 54, 77, 77, 98, 114, 115, 135, 148, 146,... downloaded ...
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
8698 truck95 RGB JPEG (256, 256) 256 256 [343, 157, 187, 215, 218, 260, 230, 265, 278, ... [778, 337, 278, 314, 348, 430, 380, 415, 408, ... [1087, 351, 343, 326, 392, 378, 402, 447, 511,... downloaded ...
8699 truck96 RGB JPEG (256, 256) 256 256 [4, 2, 10, 20, 54, 78, 91, 85, 101, 148, 147, ... [35, 26, 28, 43, 76, 84, 100, 94, 119, 163, 16... [18, 10, 16, 38, 64, 93, 103, 94, 113, 155, 15... downloaded ...
8700 truck97 RGB JPEG (256, 256) 256 256 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... [0, 1, 0, 0, 0, 2, 1, 0, 0, 1, 0, 0, 4, 0, 2, ... downloaded ...
8701 truck98 RGB JPEG (256, 256) 256 256 [244, 124, 157, 198, 341, 471, 715, 596, 827, ... [201, 128, 236, 357, 711, 1012, 438, 333, 373,... [1012, 899, 504, 413, 348, 260, 266, 242, 177,... downloaded ...
8702 truck99 RGB JPEG (256, 256) 256 256 [36, 90, 303, 819, 1112, 1558, 1519, 1220, 926... [0, 2, 14, 81, 377, 819, 1092, 1201, 1257, 119... [118, 143, 279, 357, 498, 456, 593, 554, 655, ... downloaded ...

8703 rows × 22 columns

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-10-88a489c08ac7> in <module>()
    193 display(preprocessed_df)
    194 #save to csv file
--> 195 preprocessed_df.to

/usr/local/lib/python3.7/dist-packages/pandas/core/generic.py in __getattr__(self, name)
   5485         ):
   5486             return self[name]
-> 5487         return object.__getattribute__(self, name)
   5488 
   5489     def __setattr__(self, name: str, value) -> None:

AttributeError: 'DataFrame' object has no attribute 'to'
In [ ]:
#save to csv file
preprocessed_df.to_csv(preprocessed_data + 'preprocesseddata.csv')

Image preprocessing works well, but there are some problems with preprocessed_df, so we will not use it.

The rest of the code (data augmentation and division into train/val/test set) will be held in the separate notebook.

-------------------------------------------------

Próbne kody:

In [ ]:
hst = image.histogram()
red = hst[0:256]      # indicates Red
green = hst[256:512]  # indicated Green
blue = hst[512:768]   # indicates Blue

plt.figure(0) # plots a figure to display RED Histogram
for i in range(0, 256):
  plt.title("Histogram of RED pixels")
  plt.xlabel('Wartość pixela')
  plt.ylabel('Ilość pixeli') 
  plt.bar(i, red[i], color = getRed(i)) #, alpha=0.3

plt.figure(1) # plots a figure to display GREEN Histogram
for i in range(0, 256):
  plt.title("Histogram of GREEN pixels")
  plt.xlabel('Wartość pixela')
  plt.ylabel('Ilość pixeli') 
  plt.bar(i, green[i], color = getGreen(i))

plt.figure(2) # plots a figure to display BLUE Histogram
for i in range(0, 256):
  plt.title("Histogram of BLUE pixels")
  plt.xlabel('Wartość pixela')
  plt.ylabel('Ilość pixeli') 
  plt.bar(i, blue[i], color = getBlue(i))

plt.figure(3) # plots a figure to display RGB Histogram
for i in range(0, 256):
  plt.title("Bar histogram of RGB pixels")
  plt.xlabel('Wartość pixela')
  plt.ylabel('Ilość pixeli') 
  plt.bar(i, blue[i], color = getBlue(i))
  plt.bar(i, red[i], color = getRed(i))
  plt.bar(i, green[i], color = getGreen(i))

plt.figure(4) # plots a figure to display RGB Histogram
plt.title("Line histogram of RGB pixels")
plt.xlabel('Wartość pixela')
plt.ylabel('Ilość pixeli') 
plt.plot(red, color='red')
plt.plot(green, color='green')
plt.plot(blue, color='blue')

plt.show()
In [ ]:
class_names = ['bicycle', 'bus', 'car', 'motorcycle', 'truck']
for class_name in class_names:
  imageid = 0
  #image = collected_data_dir+class_name#.glob('*/*.jpg')
  imageCollectedFilePath = Path.joinpath(collected_data_dir, class_name)
  imageDownloadedFilePath = Path.joinpath(downloaded_data_dir, class_name)
  imageFinalFilePath = Path.joinpath(final_data_dir, class_name)
  #print(imageFinalFilePath)
  #print(imageFilePath)
  for imagePath in list(imageCollectedFilePath.glob('*.*')):
    #print(imageid)
    #print(imagePath)
    image = Image.open(imagePath) # ładuje zdjęcie (read_image)
    # save in the same format
    #print(image.format)
    #print(Path.joinpath(imageFinalFilePath, f'{class_name + str(imageid)}.{str(image.format)}'))
    image_name = class_name + str(imageid)
    image_mode = image.mode
    image_format = image.format
    image_size = image.size
    #print(image_name, image_mode, image_format, image_size)
    #SAVE IMAGE
    #image.save(Path.joinpath(imageFinalFilePath, f'{image_name}.{str(image_format)}'), format=image_format)
    #remember to increment image_id
    imageid += 1

    hst = image.histogram()
    red = hst[0:256]      # indicates Red
    green = hst[256:512]  # indicated Green
    blue = hst[512:768]   # indicates Blue
    
    plt.figure(0) # plots a figure to display RED Histogram
    for i in range(0, 256):
      plt.title("Histogram of RED pixels")
      plt.xlabel('Wartość pixela')
      plt.ylabel('Ilość pixeli') 
      plt.bar(i, red[i], color = getRed(i)) #, alpha=0.3
    
    plt.figure(1) # plots a figure to display GREEN Histogram
    for i in range(0, 256):
      plt.title("Histogram of GREEN pixels")
      plt.xlabel('Wartość pixela')
      plt.ylabel('Ilość pixeli') 
      plt.bar(i, green[i], color = getGreen(i))
    
    plt.figure(2) # plots a figure to display BLUE Histogram
    for i in range(0, 256):
      plt.title("Histogram of BLUE pixels")
      plt.xlabel('Wartość pixela')
      plt.ylabel('Ilość pixeli') 
      plt.bar(i, blue[i], color = getBlue(i))
    
    plt.show()

    # r, g, b = image.split()
    # print("histogram length: ", len(image.histogram()))
    # #display(r.histogram())
    # plt.hist(image.histogram(), bins=None)
    # #optionally - show image
    # #plt.imshow(image)
    # plt.show()
    break
    if imageid == 2:
      break
  break
In [ ]:
256*3
Out[ ]:
768
In [ ]:
r, g, b = img.split()
len(r.histogram())
### 256 ###
 
r.histogram()
In [ ]:
class_names = ['bicycle', 'bus', 'car', 'motorcycle', 'truck']
for class_name in class_names:
  #image = collected_data_dir+class_name#.glob('*/*.jpg')
  imageFilePath = Path.joinpath(collected_data_dir, class_name)
  #print(imageFilePath)
  for imagePath in list(imageFilePath.glob('*.*')):
    #print(imagePath)
    image = Image.open(imagePath) # ładuje zdjęcie (read_image)
    #todo: imageid
    print("image: ", image)
    print(image.format)
    print(image.mode)
    print(image.size)
    data = np.asarray(image)
    #print("data: ", data)
    # summarize shape
    #print("data shape: ", data.shape)
    # create Pillow image
    image2 = Image.fromarray(data)
    print("image2: ", image2)
    # summarize image details
    print(image2.format)
    print(image2.mode)
    print(image2.size)
    plt.imshow(image)
    plt.show()
    break
  break
image:  <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=2976x2976 at 0x7FC4D11734D0>
JPEG
RGB
(2976, 2976)
image2:  <PIL.Image.Image image mode=RGB size=2976x2976 at 0x7FC4D1146E90>
None
RGB
(2976, 2976)
In [ ]:
from os import listdir
# load all images in a directory
loaded_images = list()
for filename in listdir(collected_data + '/bicycle'):
  # load image
  img_data = image.imread(collected_data + '/bicycle/' + filename)
  #print(img_data)
  # store loaded image
  loaded_images.append(img_data)
  print('> loaded %s %s' % (filename, img_data.shape))
  break
> loaded IMG_20220312_123458.jpg (2976, 2976, 3)
In [ ]:
filename
Out[ ]:
'IMG_20220312_123458.jpg'